Java从零开始学十七(简单工厂)

简单工厂的实现

实现一个计算器:要求输入2个数,和运算符,得到结果

Operation类

package com.pb.demo1;

public class Operation {
    private double num1;
    private double num2;

    public double getResult(double num1,double num2){
        double result=0;
        return result;
    }

    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

}

加,减,乖,除,取模

package com.pb.demo1;
/*
 * 加法
 */
public class AddOperation extends Operation {

    @Override
    public double getResult(double num1, double num2) {

        return (num1+num2);
    }

}
package com.pb.demo1;
/*
 * 减法
 */
public class Substruction extends Operation {

    @Override
    public double getResult(double num1, double num2) {

        return (num1-num2);
    }

}
package com.pb.demo1;
/*
 * 乖法
 */
public class Multiplication extends Operation {

    @Override
    public double getResult(double num1, double num2) {

        return (num1*num2);
    }

}
package com.pb.demo1;
/*
 * 除法
 */
public class Division extends Operation {

    @Override
    public double getResult(double num1, double num2) {

        return (num1/num2);
    }

}
package com.pb.demo1;
/*
 * 取余
 */
public class ModeOperation extends Operation {

    @Override
    public double getResult(double num1, double num2) {

        return (num1%num2);
    }

}

工厂类:

package com.pb.demo1;
/*
 * 简单工厂类
 */
public class Factory {
   //返回类型 为类对象
    public Operation getResult(String op){
        Operation operation=null;
        //根据操作符来声明对象并返回
        switch (op){
        case "+":
            operation=new AddOperation();
            break;
        case "-":
            operation=new Substruction();
            break;
        case "*":
            operation=new Multiplication();
            break;
        case "/":
            operation=new Division();;
            break;
        case "%":
            operation=new ModeOperation();
            break;
            default:
                System.err.println("输入运算符不正确!");
                break;
        }
        //返回生成的对象
        return operation;
    }
}

测试类:

package com.pb.demo1;

import java.util.InputMismatchException;
import java.util.Scanner;

/*
 * 计算器
 */
public class Demo1 {

    public static void main(String[] args) {
        //声明扫描器类型变量
        Scanner  input =new Scanner(System.in);
        //声明工厂对象
        Factory fac=new Factory();
    try{
        System.out.println("请输入第一个整数:");
        double num1=input.nextDouble();
        System.out.println("请输入第二个整数:");
        double num2=input.nextDouble();
        System.out.println("请输运算符:+、-、*、/、%");
        String op=input.next();
        //接收工厂的返回对象 工厂根据操作符生成的对象
        Operation operation=fac.getResult(op);
        //接收计算结果
            double result=operation.getResult(num1, num2);
            //显示计算结果
            System.out.println(num1+"与"+num2+"的运行结果:"+result);
    }catch(InputMismatchException e){
        System.err.println("输入类型不正确!");

    }catch(Exception e){
        e.printStackTrace();
    }
    }
}
时间: 2024-12-28 08:43:07

Java从零开始学十七(简单工厂)的相关文章

Java实验项目三——简单工厂模式

Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽车品牌, 通过接口car为客户提供相应的汽车对象. Description:通过java反射机制和Properties类的结合使用,实现工厂模式.代码如下: 1.首先是entity包中的一个接口和三个实体类 汽车接口: 1 /* 2 *Description:定义汽车接口 3 * */ 4 5 6

小菜学设计模式——简单工厂模式

背景 很多时候我们不知道客户具体需要执行哪种类型的操作,但是客户会给出我们对应的提示信息,那么我们的程序必须能够根据参数信息进行动态操作,这样的程序才是一个可扩展的程序.简单工厂模式应该是我们最常见的一种设计模式之一,他就是根据客户的意图选择对应的执行类型进行操作,实际上就是根据不同的参数实例化出不同的对象,所以叫做工厂. 1.使用意图 根据参数的不同实例化出对应的类型对象,对于那些需要大量 生成相同父类实例的程序,他可以避免了代码的重复. 2.生活实例 生活处处是例子 3.Java 例子(框架

Java设计模式学习记录-简单工厂模式、工厂方法模式

前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I

Java学习笔记——对比简单工厂模式和策略模式

简单工厂模式:客户端传一个条件进工厂类,工厂类根据条件创建相应的产品类对象,客户端使用该产品类对象.工厂类依赖产品类 策略模式:客户端创建一个Context类对象,并通过传入参数使用该对象.Context类中聚合了产品类,没有依赖关系 策略模式比简单工厂模式更优雅.

Java从零开始学四十七(注解简述)

一.Java中注解Annotation 什么是注解:用来描述数据的数据(元数据). Java代码里的特殊标记.它为代码中添加用Java程序无法表达的额外信息提供一种形式化的方法,使用我们可以在未来的某一个时刻方便的使得这些注解修饰的程序元素.  作用: 用将由编译器来测试和验证的格式,存储有关程序额外信息 生成 描述符文件,甚至是新的类定义 减轻编写模板代码的负担 使代码更加干净易读 注解和注释不同 注解与普通的代码注释有一定的区别,也有一定的联系.注解和注释都属于对代码的描述: 注释的作用只是

Java从零开始学二十七(NumberFormat类)

一.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Locale[] getAvailableLocales() 普通 返回所有语言环境的数组 2 public static final NumberFormat getInstance() 普通 返回当前默认语言环境的数字格式 3 public static NumberFormat getInstanc

Java从零开始学三十七(JAVA IO- 二进制文件读写)

一.简述 二.使用步骤 DataInputStream: 引入相关的类 构造数据输入流的对象(如:FileInputStream,BufferedWriter包装后读取文件等) 读取二进制文件的数据 关闭数据输入流 DataOutputStream: 引入相关的类 构造数据输出流的对象(如:FileOputStream,BufferedWriter包装后写入文件等) 写入二进制文件的数据 关闭数据输入流 三.使用 package com.pb.data; import java.io.Buffe

Java从零开始学十六(多态)

一.什么是多态 多态性是指允许不同类的对象对同一消息作出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用程序函数同名问题.多态有两种表现形式:重载和覆盖首先说重载(overload),是发生在同一类中.与什么父类子类.继承毫无关系.标识一个函数除了函数名外,还有函数的参数(个数和类型).也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同.他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可

Java从零开始学四十二(DOM解析XML)

一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <PhoneInfo name="手机品牌"> <Brand name="华为"> <Type name="U8650"> </Type> </Brand