• 简单工厂方法


    工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

    工厂模式有三种:简单工厂模式、工厂方法模式、抽象工厂模式

    这里先介绍简单工厂模式

    简单工厂模式

    又称静态工厂方法模式,从名字来看,这种模式体现的就是简单。主要的实现思想是通过创建一个工厂类,通过调用工厂方法的静态方法返回相应的对象。例如有一个计算程序:输入两个数和运算符号(+-*/),输出运算结果。可以这样写:

            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            String number1 = scanner.next();
            System.out.println("请输入第二个数:");
            String number2 = scanner.next();
            System.out.println("请输入运算符号:");
            String operation = scanner.next();
            switch (operation){
                case "+":
                    System.out.println(Integer.valueOf(number1) + Integer.valueOf(number2));
                    break;
                case "-":
                    System.out.println(Integer.valueOf(number1) - Integer.valueOf(number2));
                    break;
                case "*":
                    System.out.println(Integer.valueOf(number1) * Integer.valueOf(number2));
                    break;
                case "/":
                    System.out.println(Integer.valueOf(number1) / Integer.valueOf(number2));
                    break;
            }
            scanner.close();
    

    当然,这只是最简单的实现,并且没有对除数为0等做处理,这样做也行,但如果后面要添加更多的计算方法,比如开方、乘方等,那么就要无限的增加switch分支,让程序难以维护。所以可以采用简单工厂的方式实现:

    public abstract class Operation {
    
        private double number1 = 0;
        private double number2 = 0;
    
        public double getNumber1() {
            return number1;
        }
    
        public void setNumber1(double number1) {
            this.number1 = number1;
        }
    
        public double getNumber2() {
            return number2;
        }
    
        public void setNumber2(double number2) {
            this.number2 = number2;
        }
    
        public abstract double getResult();
    }
    

    运算抽象类,后面的运算规则通过继承这个类进行运算。

    public class AddOperation extends Operation {
        @Override
        public double getResult() {
            return getNumber1() + getNumber2();
        }
    }
    public class SubOperation extends Operation {
        @Override
        public double getResult() {
            return getNumber1() - getNumber2();
        }
    }
    public class MulOperation extends Operation {
        @Override
        public double getResult() {
            return getNumber1() * getNumber2();
        }
    }
    public class DivOperation extends Operation {
        @Override
        public double getResult() {
            return getNumber1() / getNumber2();
        }
    }
    

    定义一个构造计算方法的工厂:

    public class OperationFactory {
    
        public static Operation createOperation(char operate){
            Operation operation = null;
            switch (operate){
                case '+':
                    operation = new AddOperation();
                    break;
                case '-':
                    operation = new SubOperation();
                    break;
                case '*':
                    operation = new MulOperation();
                    break;
                case '/':
                    operation = new DivOperation();
                    break;
            }
            return operation;
        }
    
    }
    

    这样就能通过这个简单工厂来创建相应的运算对象(当然,有很多细节没有进行处理)。

            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            String number1 = scanner.next();
            System.out.println("请输入第二个数:");
            String number2 = scanner.next();
            System.out.println("请输入运算符号:");
            String operation = scanner.next();
            Operation o = null;
            try {
                o = OperationFactory.createOperation(operation.charAt(0));
                o.setNumber1(Double.valueOf(number1));
                o.setNumber2(Double.valueOf(number2));
            }catch (Exception e){
    
            }
            System.out.println(o.getResult());
    
  • 相关阅读:
    2020去奔跑
    2020前两个月学习心得
    2020年1_2月寒假学习心得
    寒假中期考核个人总结
    Numpy、Matplotlib和pandas学习路线引导
    Python学习路线引导-Python入门基础
    2019在路上
    2020/11/28助教一周小结(第九周)
    2020/11/3助教一周小结(第五周)
    2020/10/25助教一周小结(第四周)
  • 原文地址:https://www.cnblogs.com/yuanmiemie/p/8570288.html
Copyright © 2020-2023  润新知