设计模式-简单工厂模式

核心理念

  • 根据不同的参数返回不同的实例
  • 专门用一个类来创建其它类的实例
  • 创建的类都具用共同的父类

优缺点

优点

  • 对象的创建和业务的处理分离开来,可以降低系统的耦合性
  • 新增业务只需新增处理类即可,不影响原来的业务处理类

缺点

  • 工厂类需要根据参数判断返回的类,与开闭原则有点相违背

代码示例

操作类

java 复制代码
public abstract class Operation {

    private double numberA;

    private double numberB;

    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;
    }

    public abstract double getResult();
}

简单工厂类

java 复制代码
public class OperationFactory {
    public Operation createOperate(String operate){
        if("+".equals(operate)){
            return new AddOperation();
        } else if("-".equals(operate)){
            return new SubOperation();
        }else{
            return null;
        }
    }
}

加法运算类

java 复制代码
public  class AddOperation extends Operation {
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

减法运算类

java 复制代码
public  class SubOperation extends Operation {
    @Override
    public double getResult() {
        return getNumberA() - getNumberB();
    }
}

测试

java 复制代码
public class AppRun {
    public static void main(String[] args) {
        OperationFactory operationFactory = new OperationFactory();
        Operation operate = operationFactory.createOperate("+");
        operate.setNumberA(1.2);
        operate.setNumberB(33.3);
        System.out.println(operate.getResult());
    }
}
相关推荐
珍珠先生2 分钟前
第17章 集合框架:Map
java
电子科技圈5 分钟前
IAR与东软睿驰达成战略合作,强化软件开发效率与生态协作
设计模式·开源·软件工程·软件构建·代码规范·设计规范·代码复审
伯远医学6 分钟前
RIP-seq 高分文献案例分享
java·前端·javascript·人工智能·算法·eclipse·html
吃杠碰小鸡7 分钟前
VsCode中使用Java
java·vscode
lq_bog13 分钟前
spring事务失效
java·数据库·spring
API快乐传递者24 分钟前
淘宝京东数据分析实战指南:从指标体系到决策落地的全链路方法论
java·大数据·数据分析
vancece26 分钟前
JS实现堆 & 215.数组中的第K个最大元素
java·前端·javascript
就叫_这个吧27 分钟前
java springcloud熔断降级组件sentinel基础应用及nacos持久化处理
java·spring cloud·nacos·sentinel
SimonKing37 分钟前
Apache Fory JSON或许可以替代FastJson
java·后端·程序员
程序员良辰1 小时前
【TongWeb7的M11】 首次登录密码修改 & 开启控制台远程访问
java·中间件·tomcat