美文网首页
简单工厂模式(java)

简单工厂模式(java)

作者: SlipProgrammer | 来源:发表于2019-01-30 14:31 被阅读0次

1.提出问题:设计一个简单的计算器功能。

原始版本:

定义减法

private final static String ADD = "+";

public static void main(String[] args) {

    System.out.println("请输入数字A");

    Scanner scannerA = new Scanner(System.in);

    double numberA = scannerA.nextDouble();

    System.out.println("请输入数字B");

    Scanner scannerB = new Scanner(System.in);

    double numberB = scannerB.nextDouble();

    System.out.println("请输入运算符C");

    Scanner scannerC = new Scanner(System.in);

    String operator = scannerC.next();

    if (ADD.equalsIgnoreCase(operator)) {

        System.out.println(numberA + numberB);

    }

}

这样就实现了一个加法计算器,那么问题来了,如果我要为计算器新增减法功能呢?有些同学就说新增一个if判断不就好了?那么问题又来了,我有N个类都用了计算器我们是不是就要去N个地方去修改?是的,那么我们很容易就可以想到利用封装的思想将计算逻辑与控制台输入给分开,改造好的运算逻辑方法,如下:

/**

* 这里用到了封装思想,封装了运算方法,将输入和运算逻辑分开了

* @param numberA 输入的第一个值

* @param numberB 输入的第二个值

* @param operator 运算符

* @author WangHan

* @date 2019/1/21 16:15

*/

private static double operation(double numberA, double numberB, String operator) {

    if (ADD.equalsIgnoreCase(operator)) {

        return numberA + numberB;

    } else if (SUBTRACT.equalsIgnoreCase(operator)) {

        return numberA - numberB;

    }else {

        return 0;

}

}

这样尽管我有N多个地方输入计算值和计算符号,我也可以都调用这一个operation方法来计算结果!这就是封装的思想了。

继续:

如果此时要增加两个运算符*和/,需要修改operation方法让加减法也参与了重新编译,如果不小心将加减法改错那么就是坑爹!

增加需求,尽可能的扩展的来解决问题而不是去修改原来的代码

此时我们新增一个算法的父类Operation:

@Data

public class Operation {

    public double numberA = 0;

    public double numberB = 0;

    public double getResult() {

        return 0;

}

    public static class OperationAdd extends Operation {

        /**

        * 重写getResult方法

        */

        @Override

        public double getResult() {

            return numberA + numberB;

}

}

    public static class OperationSub extends Operation {

        /**

        * 重写getResult方法

        */

        @Override

        public double getResult() {

            return numberA - numberB;

}

}

}

并且新增两个子类OperationAdd 和OperationSub 去继承Operation分别实现加减算法。

新增一个工厂类OperationFactory:

class OperationFactory {

    static Operation createOperation(double numberA, double numberB, String operator) {

        Operation operation;

        switch (operator) {

            case "+":

                operation = new Operation.OperationAdd();

                operation.setNumberA(numberA);

                operation.setNumberB(numberB);

                return operation;

            case "-":

                operation = new Operation.OperationSub();

                operation.setNumberA(numberA);

                operation.setNumberB(numberB);

                return operation;

            default:

                return null;

}

}

}

通过判断运算符去确定我要实例化那个算法的子类就可以了

这样在实现计算器功能的时候就用到了简单工厂模式,我们调用工厂类去实例化算法:

Optional<Operation> optional = Optional.ofNullable(OperationFactory.createOperation(numberA, numberB, operator));

optional.ifPresent(operation ->System.out.println("第三版计算结果:" + operation.getResult()));

学习到这里简答做个笔记!

相关文章

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 《JAVA与模式》之简单工厂模式

    《JAVA与模式》之简单工厂模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是...

  • 简单工厂模式

    Java23种设计模式--简单工厂模式 一、什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法...

  • 工厂模式(Factory Pattern)

    概述 工厂模式(Factory Pattern)包括简单工厂模式、工厂方法模式和抽象工厂模式,是 Java 中最常...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • Java 设计模式1-简单工厂模式

    简单工厂模式不属于标准的Java 23设计模式之内。根据分类,简单工厂模式又分类为:1.普通简单工厂模式。2.多方...

  • JAVA基础23种设计模式----简单工厂模式--MonkeyK

    JAVA基础23种设计模式----简单工厂模式--MonkeyKing 简单工厂模式属于类的创建模型模式,又叫静态...

  • Java设计模式-工厂方法模式

    上一篇:Java设计模式-简单工厂模式 与简单工厂模式的对比 在简单工厂模式中,每当我们添加了新的功能(例如例子中...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 四 抽象工厂模式

    转自java成神之路 工厂模式的简单回顾 在介绍了简单工厂模式和工厂方法模式之后,相信很多人对工厂模式(如果单独提...

网友评论

      本文标题:简单工厂模式(java)

      本文链接:https://www.haomeiwen.com/subject/ymiqsqtx.html