1、简介
简单工厂模式的实质 是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例.(这些产品类继承自一个父类或接口) ---百度总结的很精辟.
简单工厂模式 主要解决对象的创建问题.
该模式中包含的角色以及职责:
1)工厂角色
负责实现创建所有实例的内部逻辑.工厂类的创建产品类方法可以被外部直接调用,创建所需的产品对象.
2)抽象产品角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口.
3)具体产品角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例.
举一个计算器的例子,可以参考UML类图理解下:
2.代码实现
1)运算类 -- 抽象产品角色
@Data public class Operation { private double numberA = 0; private double numberB = 0; public double getResult() { return 0; } }
2)加法类 -- 具体产品角色
public class OperationAdd extends Operation { @Override public double getResult() { return getNumberA() + getNumberB(); } }
3)减法类 -- 具体产品角色
public class OperationSub extends Operation { @Override public double getResult() { return getNumberA() - getNumberB(); } }
4)工厂角色
public class OperationFactory { public static Operation createOperate(String operate){ Operation oper = null; switch (operate){ case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; } return oper; } }
5)计算器工具类
@Slf4j public class CalculatorUtil { public static double getResult(double numberA, double numberB, String operate) { Operation operation = OperationFactory.createOperate(operate); operation.setNumberA(numberA); operation.setNumberB(numberB); return operation.getResult(); } public static void main(String args[]) { log.info("入参A:{},B:{},运算:{},结果:{}", 10, 5, "+", getResult(10, 5, "+")); } }