zoukankan      html  css  js  c++  java
  • 简单工厂模式小结



    直觉地使用计算机机能理解的面向过程的方式去解决问题,
    会出现耦合的问题,
    是一种短期的方案,
    使得程序不容易维护与拓展。
    所以应该将面向对象的思想应用到程序设计当中,通过封装、继承、多态将程序的耦合度降低,
    运用设计模式增强程序的灵活性,使得它易于修改与复用。
    为了培养更好的编程思维与习惯,
    先从设计模式的学习与使用开始,
    希望有计划地学习设计模式,并且逐渐从了解到化为内用嘤嘤嘤!

    一、简单工厂模式:
    创建一个专门的类,使它根据情况创建不同类的对象,实现业务逻辑与界面逻辑的分离,降低耦合。

    二、以实现简单计算器为例:
    创建基础运算抽象类
    继承抽象类,实现抽象类中的具体运算方法
    创建简单工厂类,由简单工厂类根据情况选定运算方法,即选定需要创建的类对象。

    abstract class Operation{
        private double numberA=0;
        private double numberB=0;
    
        public double getNumberA() {
            return numberA;
        }
    
        public void setNumberA(double numberA) {
            this.numberA = numberA;
        }
    
        public double getNumberB() {
            return numberB;
        }
    
        public void setNumberB(double numberB) {
            this.numberB = numberB;
        }
    
        abstract double getResult() throws Exception;
    }
    
    /**
     * 继承抽象类,实现一些具体的运算
     */
    class Add extends Operation{
    
        @Override
        double getResult() {
            return getNumberA()+getNumberB();
        }
    }
    
    class Less extends Operation{
    
    
        @Override
        double getResult() {
            return getNumberA()-getNumberB();
        }
    }
    
    class Mul extends Operation {
    
    
        @Override
        double getResult() throws Exception{
            if (getNumberB()!=0){
                return getNumberA()/getNumberB();
            }else{
                throw new Exception("除数为零,不合法");
            }
        }
    }
    
    public class SimpleFactory {
        public Operation chooseFunc (String operate){
            Operation operation=null;
            switch (operate){
                case "+":
                    operation=new Add();
                    break;
                case "-":
                    operation=new Less();
                    break;
                case "/":
                    operation=new Mul();
                    break;
                default:
                    System.out.println("继续扩展方法吧");
                    break;
            }
            return operation;
        }
    }
    
    class Test{
        public static void main(String[] args) throws Exception {
            double numberA=23;
            double numberB=22;
            String[] operate={"+","-","/"};
    
            SimpleFactory simpleFactory=new SimpleFactory();
            Operation operation=simpleFactory.chooseFunc(operate[2]);
            operation.setNumberA(numberA);
            operation.setNumberB(numberB);
            System.out.println(operation.getResult());
        }
    }

      

     


    菜甜二的学习笔记and总结啊。。。总会遇到挫折,可是还是要保持开阔的心态才能开心的学习啊,坚持吧。
  • 相关阅读:
    2021找工作总结
    HashMap源码(JDK1.8)-手动注释
    HashMap底层源码分析-手动注释
    面试常问的ArrayQueue底层实现
    SVN使用方法
    async await Task 使用方法
    视觉设备说明
    Java8--lambda表达式与函数式编程
    重磅!微软发布 vscode.dev,把 VS Code 带入浏览器!
    解决Vite-React项目中js使用jsx语法报错的问题
  • 原文地址:https://www.cnblogs.com/chen-ying/p/10979058.html
Copyright © 2011-2022 走看看