设计模式-简单工厂模式(静态工厂)

我觉得工厂模式是特别简单的一个模式
说白了就是根据不同的情况实例化并返回不同的对象

 

给出一个计算器的例子

复制代码
 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类,不必更改其他类的实现,安全
 
 
总结:我认为工厂模式的核心就是根据不同的情况返回各种场景所需的东西,这也是使用工厂模式的场景。一般返回的类都继承一个父类。

posted @   知识海洋中的浮萍  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示