设计模式-简单工厂模式(静态工厂)
我觉得工厂模式是特别简单的一个模式
说白了就是根据不同的情况实例化并返回不同的对象
给出一个计算器的例子
1 import lombok.Data; 2 3 /** 4 * @author wrj 5 * @description 6 * @Date 2021/12/2 10:16 上午 7 */ 8 9 @Data//我使用了lombok 也可以不用,手动写get,set方法 为了方便阅读 10 //定义抽象父类运算类 11 abstract class Operation{ 12 13 private Long numA; 14 15 private Long numB; 16 17 public abstract Long getResult(); 18 } 19 //加法 20 class addOperation extends Operation{ 21 @Override 22 public Long getResult() { 23 return getNumA()+getNumB(); 24 } 25 } 26 //减法 27 class subtractOperation extends Operation{ 28 @Override 29 public Long getResult() { 30 return getNumA()-getNumB(); 31 } 32 } 33 //运算工厂 34 class OperationFactory{ 35 36 public static Operation getOperation(String operate){ 37 switch (operate){ 38 case "+": 39 return new addOperation(); 40 case "-": 41 return new subtractOperation(); 42 default: 43 throw new RuntimeException("不存在的运算"); 44 } 45 } 46 } 47 //测试 48 public class Factory { 49 50 public static void main(String[] args) { 51 Operation operation = OperationFactory.getOperation("+"); 52 operation.setNumA(3L); 53 operation.setNumB(8L); 54 System.out.println(operation.getResult()); 55 } 56 }
其中,Operation是一个抽象类,定义了两个参数以及抽象的方法,获取结果
之后addOperation和subtractOperation继承了Operation,重写了getResult方法,用于实现自己获取结果的逻辑
OperationFactory是这个模式的核心,用于根据操作符返回对应的操作类
这个例子中这样设计的优点在于
1.如果日后增加其他的操作,比如乘,除,平方,开根各种运算,只需要创建各自的实现了重写getResult方法即可
2.如需要更改加法的实现,只需要更改addOperation类,不必更改其他类的实现,安全
总结:我认为工厂模式的核心就是根据不同的情况返回各种场景所需的东西,这也是使用工厂模式的场景。一般返回的类都继承一个父类。