zoukankan      html  css  js  c++  java
  • 第四讲:工厂模式在开发中的运用

    运用面向对象的思想将加法运算封装起来.

    如果不希望  Operation operation = new AddOperation();   new一个Operation那就使用简单工厂模式.

    以下就是使用了简单工厂模式之后直接从工厂类里面获取AddOperation.

    Operation operation = OperationFactory.getOperation(oper);
    operation.setNum1(num1);
    operation.setNum2(num2);
    result = operation.getResult();


    要添加的话直接在工厂类里面添加判断和添加操作类.这样程序拥有了扩展性.你可以无限扩展.符合了开放封闭原则中的开放原则.那么现在是封闭的吗?它不是封闭的,因为现在添加操作的话工厂类也是要修改的.


    那么现在使用工厂方法模式,把工厂类抽象出来,把具体的操作交给它的子类(具体工厂类).

    所以工厂方法模式在客户端里面必须进行判断, 这就是简单工厂模式和工厂方法模式在计算器这个例子中的应用.


    在面试中写出简单工厂模式即可,工厂方法模式并不强求.可以应用更高级的技术:反射来动态加载哪个类.


    public abstract class Operation {
        private double num1;
        private double num2;
        public double getNum1() {
            return num1;
        }
        public void setNum1(double num1) {
            this.num1 = num1;
        }
        public double getNum2() {
            return num2;
        }
        public void setNum2(double num2) {
            this.num2 = num2;
        }
        public abstract double getResult();
    }
    public class AddOperation extends Operation {
    
        @Override
        public double getResult() {
            // TODO Auto-generated method stub
            double result = this.getNum1() + this.getNum2();
            return result;
        }
    
    }
    /*public class OperationFactory {
         public static Operation getOperation(String oper){
             if("+".equals(oper)){
                 return new AddOperation();
             }else if ("-".equals(oper)){
                 return new SubtractionOperation();
             }
            return null;
             
         }
         }
         */
    public interface OperationFactory{
        //public Operation getOperation(String oper);
        public Operation getOperation();
    }
    public class AddOperationFactory implements OperationFactory{
    
        @Override
        //public Operation getOperation(String oper) {
            public Operation getOperation() {
            // TODO Auto-generated method stub
            return new AddOperation();
        }
    
    }
    public class SubtractionOperation extends Operation{
    
        @Override
        public double getResult() {
            // TODO Auto-generated method stub
            //return this.getNum1()-this.getNum2();
            double result =  this.getNum1()-this.getNum2();
            return result;
        }
    
    }
    import java.util.Scanner;
    
    
    public class MainClass {
        public static void main(String[] args) {
            
        
          //1.接收控制台输入
          System.out.println("-----计算机程序-----------");
          System.out.println("输入第一个操作数");
          Scanner scanner = new  Scanner(System.in);
          String strNum1 = scanner.nextLine();
          
          System.out.println("输入运算符");
          String oper = scanner.nextLine();
          
          System.out.println("输入第二个操作数");
          String strNum2 = scanner.nextLine();
          double result = 0;
          double num1 = Double.parseDouble(strNum1);
          double num2 = Double.parseDouble(strNum2);
          //2.进行运算
    /*      if("+".equals(oper)){
              //result = Double.parseDouble(strNum1) + Double.parseDouble(strNum2);
              Operation operation = new AddOperation();
              operation.setNum1(num1);
              operation.setNum2(num2);
              result = operation.getResult();
          } else if("-".equals(oper)){
              result = Double.parseDouble(strNum1) - Double.parseDouble(strNum2);
          } else if("*".equals(oper)){
              result = Double.parseDouble(strNum1) * Double.parseDouble(strNum2);
          } else if("/".equals(oper)){
              result = Double.parseDouble(strNum1) / Double.parseDouble(strNum2);
          }*/
        
          /*Operation operation = OperationFactory.getOperation(oper);
          operation.setNum1(num1);
          operation.setNum2(num2);
          result = operation.getResult();
          */
          if("+".equals(oper)){
              OperationFactory factory = new AddOperationFactory();
              Operation operation = factory.getOperation();
              operation.setNum1(num1);
              operation.setNum2(num2);
              result = operation.getResult();
          }
          //3.返回结果
          System.out.println(strNum1 + oper + strNum2 + "=" +result);
          
    }
    }
  • 相关阅读:
    perl 解json数组
    华为云3大体系化防护实践,保障金融业云上数据安全
    弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
    【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程
    云+AI+5G时代,华为云已准备好多元化云服务架构
    高能街访 | 为什么他们都纷纷为深圳打Call?
    Angularjs进阶笔记(2)—自定义指令中的数据绑定
    Angularjs进阶笔记(1)—不同类型的双向数据绑定
    ServiceComb java-chassis和CSE java-chassis的区别
    使用inspector功能查看和管理契约
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6769569.html
Copyright © 2011-2022 走看看