• 设计模式之简单工厂模式


      简单工厂模式:业务逻辑与界面逻辑分开。

      这样,当业务逻辑发生改变的时候,只需要改变业务相关的类及其相应的方法,而不需要动整个代码。

      书中介绍的一个比较经典的例子就是:四大发明之一--------活体印刷。  

      活体印刷的好处就是:


        一、扩展性(在语句中进行增删)

        二、复用性(多个语句可以既=多次使用同一个字)
        三、可变性(替换语句中的某个字)
        四、灵活性(无论是横式排版还是竖式排版,都比较方便)

      设计计算器的运算:
        第一:代码的规范性
        第二:封装性:“+”“-”“*”“/”。

          只做到以上两点,还不够,还应该降低代码的耦合度:即不同的运算规则,应进行分散
        第三:继承性 重写计算方法
        第四:多态性 通过不同的运算符号,返回不同的运算对象

      以下为如何通过面向对象语言来实现计算器功能的code

      界面逻辑:

     1 public class ResultClient {
     2 
     3     public static void main(String[] args){
     4         Scanner scanner new Scanner(System.in);
     5         System.out.println("请输入第一个数字:");
     6         double numberA = 0;
     7         try{
     8              numberA = scanner.nextDouble();
     9         }catch(Exception e) {
    10              System.out.println("必须输入数字");
    11             e.printStackTrace();
    12             return;
    13          }
    14         System.out.println("请输入你需要的运算符号:+、-、*、/");
    15         String operation = scanner.next();       
    16         Operation operationObj = CreateOperationObj.createOperation(operation);
    17         System.out.println("请输入第二个数字:");
    18         double numberB = scanner.nextDouble();
    19         operationObj.setdoubleA(numberA);
    20         operationObj.setdoubleB(numberB);
    21          System.out.println("运算结果为:"+operationObj.getResult());

    业务逻辑:计算方法的model类、创建对应的model

      动态创建对应的model

    public class CreateOperationObj {
       public static Operation createOperation(String operation){
              Operation operationObj = null;
               switch(operation){
                   case "+":    
                   operationObj = new OperationAdd();
                   break;
               case "-":
                     operationObj = new OperationSub();
                   break;
               case "*":
                    operationObj = new OperationMul();
                   break;
               case "/":
                    operationObj = new OperationDiv();
               }
               return operationObj;
            }
    }

    创建model类并重写父类方法

    父类

    public class Operation {
        double numberA;
        double numberB;
        public double getdoubleA() {
            return numberA;
        }
        public void setdoubleA(double numberA) {
            this.numberA = numberA;
        }
        public double getdoubleB() {
            return numberB;
        }
        public void setdoubleB(double numberB) {
            this.numberB = numberB;
        }
        public double getResult(){
                    double result = 0;
            return result;
        }
    }
    public class OperationAdd extends Operation {
    
        public double getResult() {
            double result = 0;
                    result = numberA+numberB;
            return result;
        }
    }

    减法

    public class OperationSub extends Operation {
    
        public double getResult() {
            double result = 0;
                    result = numberA-numberB;
            return result;
        }
        
    }            

    乘法

    public class OperationMul extends Operation {
    
        public double getResult() {
            double result = 0;
                    result = numberA*numberB;
            return result;
        }
        
    }

    除法:

    public class OperationDiv extends Operation {
    
        public double getResult() {
            double result = 0;
                    if (numberB == 0) {
                try {
                    throw new Exception("除数不能为0");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                result = numberA / numberB;
            }
            return result;
        }
    }
  • 相关阅读:
    java四种线程池类型以及可选择的阻塞队列
    复习-java向上转型
    synchronized 加在方法和代码块底层实现区别
    synchronized 和 lock 的区别
    hashmap-put方法过程
    mybatis-防止sql注入
    synchronized-粗略过程
    消息队列-观察者模式和发布订阅模式区别
    复习-进程的调度算法
    Chocolatey
  • 原文地址:https://www.cnblogs.com/charging-for-ycp/p/7359585.html
Copyright © 2020-2023  润新知