设计模式最简Demo:工厂方法模式[Factory Method Pattern]
来源:互联网 发布:修改网卡mac的软件 编辑:程序博客网 时间:2024/06/05 20:07
1. 程序需求
在简单工厂模式中,我们实现了一个简单的计算器,客户端在不知道运算类的情况下只需要传入一个简单的运算符就可以获取相应的操作进行运算,但是,如果我们想增加一个运算法则,比如乘方,我们考虑一下程序中需要修改的地方,首先需要扩展Operation类,增加一个乘方运算的子类,同时需要修改OperationFactory类,修改分支语句,添加case分支,这显然不满足关闭-开放原则,我们对扩展开放了,同时也对修改开放了,工厂方法模式可以改善这个问题。
2. UML图
3. Java实现
Operation及其子类见本系列文章中的简单工厂方法。
IFactory
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;public interface IFactory { Operation createOperate();}
FactoryAdd
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;import simple_factory_pattern.caculate.OperationAdd;public class FactoryAdd implements IFactory { @Override public Operation createOperate() { return new OperationAdd(); }}
FactorySub
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;import simple_factory_pattern.caculate.OperationSub;public class FactorySub implements IFactory { @Override public Operation createOperate() { return new OperationSub(); }}
FactoryMul
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;import simple_factory_pattern.caculate.OperationMul;public class FactoryMul implements IFactory { @Override public Operation createOperate() { return new OperationMul(); }}
FactoryDiv
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;import simple_factory_pattern.caculate.OperationDiv;public class FactoryDiv implements IFactory { @Override public Operation createOperate() { return new OperationDiv(); }}
Test
package factory_method_pattern.caculate;import simple_factory_pattern.caculate.Operation;public class Test { public static void main(String[] args) { IFactory factory = new FactoryAdd(); Operation operation = factory.createOperate(); operation.numberA = 2; operation.numberB = 3; System.out.println(operation.getResult()); }}
4. 总结
工厂方法模式和简单工厂模式对比,工厂方法模式需要修改的类只有客户端类,而不用对原有工厂类进行修改,在工厂方法模式中根据需求同时扩展实体类和工厂类即可实现程序功能的扩展,同时不需要对程序做很大的改动。但是缺点是增加了开放量,需要同时扩展实体类和工厂类。
阅读全文
0 0
- 设计模式最简Demo:工厂方法模式[Factory Method Pattern]
- 设计模式2:Factory Method Pattern(工厂方法模式)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- 设计模式——工厂方法模式【Factory Method Pattern】
- java设计模式---Factory Method Pattern---工厂方法模式
- 设计模式-工厂方法模式(Factory Method Pattern)
- 设计模式---工厂方法模式(Factory Method Pattern)
- 设计模式之 - 工厂方法模式 (Factory Method design pattern)
- 【设计模式】Factory Method Pattern——工厂方法模式
- JAVA设计模式之 工厂方法模式【Factory Method Pattern】
- 设计模式--工厂方法模式【Factory Method Pattern】
- Java设计模式之工厂方法模式【Factory Method Pattern】
- 设计模式--工厂方法模式(Factory Method Pattern)
- C#设计模式之工厂方法模式(Factory Method Pattern)
- 设计模式(2):工厂方法模式(Factory Method Pattern)
- Java设计模式--工厂方法模式【Factory Method Pattern】
- Java设计模式:工厂方法模式(Factory Method Pattern)
- 设计模式最简Demo:简单工厂模式[Simple Factory Pattern]
- 防止网页被嵌入框架的代码
- 获取zip包中的jar。然后将zip包中的jar拷贝在指定目录。个人demo
- centos上安装mysql并设置远程访问
- PHP远程访问文件
- php实现单文件上传
- 设计模式最简Demo:工厂方法模式[Factory Method Pattern]
- C++中endl和"\n"的区别
- JAVA学习(2)
- PHP文件指针操作
- C语言一些理解
- 商机 | 大数据/政务云采购清单 招标6起,最高招标价为299.8万(11.18-11.21)
- hdu 1829 A Bug's Life
- 网站信息无障碍辅助工具条
- C 语言内存对齐详解