大话设计模式之简单工厂模式笔记

 


简单工厂模式

以实现加、减、乘、除的计算器功能为例

初级代码:

输入数字交互界面

@SuppressWarnings("resource")
    public static void main(String[] args) {

        System.out.println("**********************************************");
        System.out.println("《大话设计模式》代码样例");
        System.out.println();

        try {
            Scanner sc = new Scanner(System.in);

            System.out.println("请输入数字A:");
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("请选择运算符号(+、-、*、/):");
            String strOperate = sc.nextLine();
            System.out.println("请输入数字B:");
            double numberB = Double.parseDouble(sc.nextLine());

            double result = getResult(numberA, numberB, strOperate);

            System.out.println("结果是:" + result);
        } catch (Exception e) {
            System.out.println("您的输入有错:" + e.toString());
        }

        System.out.println();
        System.out.println("**********************************************");

    }

运算方法:

public static double getResult(double numberA, double numberB, String operate) {
        double result = 0d;
        switch (operate) {
            case "+":
                result = numberA + numberB;
                break;
            case "-":
                result = numberA - numberB;
                break;
            case "*":
                result = numberA * numberB;
                break;
            case "/":
                result = numberA / numberB;
                break;
            case "pow":
                result = java.lang.Math.pow(numberA, numberB);
                break;
        }
        return result;
    }

缺陷:无法做到灵活的可修改和扩展

比如说加个其他运算,导致需要重新修改运算方法 且需要把加减乘除的代码重新编译一遍;且如果不小心改了其他方法,程序会出现问题,给程序带来了风险;

好的代码应该是,修改其中一个不影响另外的几个,增加运算算法也不影响其它代码;

高级写法:

思路:

到底要实例化谁,将来会不会增加实例化的对象,也就是说会不会增加运算符,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂

createOperation

«abstract»

Operation

+double numberA

+double numberB

+double getResult()

OperationAdd

+double getResult()

OperationSub

+double getResult()

OperationFactory

+Operation createOperation(String operator)

interactionView

main(String[] args)

输入数字交互界面:

public static void main(String[] args){

        System.out.println("**********************************************");       
        System.out.println("《大话设计模式》代码样例");
        System.out.println();       

        try {
            Scanner sc = new Scanner(System.in);

            System.out.println("请输入数字A:");  
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("请选择运算符号(+、-、*、/):");    
            String strOperate = sc.nextLine();
            System.out.println("请输入数字B:");  
            double numberB = Double.parseDouble(sc.nextLine());

            Operation oper = OperationFactory.createOperate(strOperate);

            double result = oper.getResult(numberA,numberB);

            System.out.println("结果是:"+result);  
        }
        catch(Exception e){
            System.out.println("您的输入有错:"+e.toString()); 
        }

        System.out.println();
        System.out.println("**********************************************");

    }

工厂类

public class OperationFactory {

    public static Operation createOperate(String operate){
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new Add();
                break;
            case "-":
                oper = new Sub();
                break;
            case "*":
                oper = new Mul();
                break;
            case "/":
                oper = new Div();
                break;
        }
        return oper;
    }

}

抽象化运算类

public abstract class Operation {

    public double getResult(double numberA, double numberB){
        return 0d;
    }

}

public class Add extends Operation {

    public double getResult(double numberA, double numberB){
        return numberA + numberB;
    }

}
posted @   啄木鸟伍迪  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
//火箭 GenerateContentList();

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示