java设计模式-简单工厂设计模式FW

简单工厂设计模式

简单工厂模式,工厂类为实际的创建类,必须提供static 方法

计算器功能通过简单工厂类实现

主体类:

public class MainClass {
    /** 简单工厂类型实现方法 **/
    public static void simpleFactory(){
        //计算器
        System.out.println("--- 计算器程序 ---");
        //输入第一个数
        System.out.println("请输入第一个数");
        Scanner sc = new Scanner(System.in);
        String firstNum = sc.nextLine();

        System.out.println("请输入运算符");
        String oper = sc.nextLine();

        System.out.println("请输入第二个数");
        String secondNum = sc.nextLine();
        double result =0.0;

        // 简单工厂模式,需要在实体工厂中创建具体的运算类
        Operation operationo =  OperationFactory.getOperation(oper);
        operationo.setFirstNum(firstNum);
        operationo.setSecondNum(secondNum);
        result =  operationo.getResult();

        System.out.println("执行结果="+result);

    }
    /** run class **/
    public static void main(String[] args) {
        MainClass.simpleFactory();
    }
}

简单工厂类

public class OperationFactory {
    //简单工厂类是创建实体类的工厂,且需要提供static 方法
    public static Operation getOperation(String oper){
     if("+".equals(oper)){
         return new AddOperation();
     }
     return null;
    }
}

抽象出来一个操作类,方便程序扩展,具体的操作类进行实现getResult方法

/** 计算的抽象操作类 **/
public abstract class Operation {
    public String getFirstNum() {
        return firstNum;
    }

    public void setFirstNum(String firstNum) {
        this.firstNum = firstNum;
    }

    public String getSecondNum() {
        return secondNum;
    }

    public void setSecondNum(String secondNum) {
        this.secondNum = secondNum;
    }

    private String firstNum;
    private String secondNum;
    /** 具体的实现类完成运算结果的实现 **/
    public abstract double getResult();

}

具体的操作类。加减乘除等等
DEMO:AddOperation

public class AddOperation extends Operation {

    public double getResult() {
        return Double.parseDouble(this.getFirstNum())+ Double.parseDouble(this.getSecondNum());
    }
}

简单工厂类的缺点, OperationFactory 类,首先不符合面向对象的程序设计开-闭原则 , 此类在计算器需要提供减法运算时,需要在已经开放的类型中进行修改,如
 public static Operation getOperation(String oper){
     if("+".equals(oper)){
         return new AddOperation();
     } 
     //** 每次新增功能都需要在此处加上else if 语句及相关代码 **//
     else if("-".equals(oper)){
         return new SubtractionOperation();
     }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值