设计模式-简单工厂模式

核心理念

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

优缺点

优点

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

缺点

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

代码示例

操作类

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());
    }
}
相关推荐
L.EscaRC5 分钟前
Spring Boot 自定义组件深度解析
java·spring boot·后端
pengzhuofan11 分钟前
IntelliJ IDEA 常用快捷键
java·ide·intellij-idea
ANGLAL13 分钟前
17.MyBatis动态SQL语法整理
java·sql·mybatis
SheepHappy27 分钟前
MyBatis-Plus 源码阅读(二)代码生成器原理深度剖析
java·源码阅读
雨白37 分钟前
重识 Java IO、NIO 与 OkIO
android·java
light_in_hand38 分钟前
内存区域划分——垃圾回收
java·jvm·算法
金銀銅鐵39 分钟前
[Java] JDK 9 新变化之 Convenience Factory Methods for Collections
java·后端
用户7406696136251 小时前
入门并理解Java模块化系统(JPMS)
java
金銀銅鐵1 小时前
[Java] 用 Swing 生成一个最大公约数计算器
java·后端
小安同学iter1 小时前
SQL50+Hot100系列(11.7)
java·算法·leetcode·hot100·sql50