博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂方法模式
阅读量:7033 次
发布时间:2019-06-28

本文共 2331 字,大约阅读时间需要 7 分钟。

---恢复内容开始---

工厂方法模式

  定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

  

  在这之前学习了简单工厂模式,用简单工厂模式实现了计算器功能。

  工厂类代码如下:

1     public class OperationFactory 2     { 3         public static Operation CreateOperae(string operate) 4         { 5             Operation oper = null; 6             switch (operate) 7             { 8                 case "+": 9                     oper = new OperationAdd();10                     break;11                 case "-":12                     oper = new OperationSub();13                     break;14                 case "*":15                     oper = new OperationMul();16                     break;17                 case "/":18                     oper = new OperationDiv();19                     break;20             }21             return oper;22         }23     }

  客户端代码:

1             Operation oper;2             oper = OperationFactory.CreateOperae("+");3             oper.NumberA = 2;4             oper.NumberB = 5;5             double result = oper.GetResult();

 

  工厂模式实现:

1     /// 2     /// 工厂接口3     /// 4     interface IFactory5     {6         Operation CreateOperation();7     }

  构建具体的工厂去实现这个接口

1     class AddFactory : IFactory 2     { 3         public Operation CreateOperation() 4         { 5             return new OperationAdd(); 6         } 7     } 8  9     class SubFactory : IFactory10     {11         public Operation CreateOperation()12         {13             return new OperationSub();14         }15     }16 17     class MulFactory : IFactory18     {19         public Operation CreateOperation()20         {21             return new OperationMul();22         }23     }24 25     class DivFactory : IFactory26     {27         public Operation CreateOperation()28         {29             return new OperationDiv();30         }31     }

  客户端代码:

1             IFactory operFactory = new AddFactory();2             Operation oper = operFactory.CreateOperation();3             oper.NumberA = 1;4             oper.NumberB = 2;5             double result = oper.GetResult();

 

  简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

  但是新增一个运算功能时,我们需要给运算工厂类的方法里面增加一个“case”分支条件,这样违背了  开放—封闭原则

  工厂方法模式实现时,客户端需要解决实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂内部逻辑判断移到了客户端代码来进行。

  你想要家功能,本来是该工厂类的,而现在是修改客户端。

---恢复内容结束---

转载于:https://www.cnblogs.com/-zda/p/7153129.html

你可能感兴趣的文章
了解一下ES6: 解构赋值&字符串
查看>>
7 - 在 Django Admin 后台发布文章
查看>>
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
查看>>
Umeng第三方登录
查看>>
EggBorn.js:一款顶级Javascript全栈开发框架
查看>>
前端开始的那件事——表单
查看>>
【前端】HTML属性
查看>>
js 算法3
查看>>
【Java 容器面试题】谈谈你对HashMap 的理解
查看>>
分组圆角TableView
查看>>
高级Java研发者在解决大数据问题上的一些技巧
查看>>
用 Node 开发一个命令行版本词典--不到十行的代码
查看>>
支持多解码模块的安卓视频播放器AndroidVideoplayer
查看>>
TCP协议详解
查看>>
Node.js process 模块解读
查看>>
Lodash源码分析-compact.js
查看>>
度小满牵手南京银行打造”AI鑫”计划:银行零售业掀起变革运动
查看>>
微信小程序之分享海报生成
查看>>
敏捷AI|NLP技术在宜信业务中的实践「背景篇」
查看>>
布局结束检测工具
查看>>