简单工厂模式
来源:互联网 发布:淘宝号怎么更换身份证 编辑:程序博客网 时间:2024/06/05 06:26
最近刚刚开始学习程杰老师的大话设计模式,首先是对面向对象基础知识的补习,例如类、封装、继承、多态、接口和事件等概念;其次就开始学习第一个设计模式--简单工厂模式了。
开始学习,是由小菜面试受挫引出的,基本一整章都是在说代码的规范化,包括可维护、可复用、可扩展和灵活性等。比较纳闷,设计模式怎么在说这些呢?上网查了资料才得到解释:
简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导吧。
那么究竟什么是简单工厂模式呢?
我的理解是:用一个单独的工厂类来创建其他类的实例。
简单工厂模式的主要组成由三种:
1.工厂(Creator)角色(指概念中的工厂类)
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象产品(Product)角色(指概念中的其他类)
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(Concrete Product)角色(指概念中的实例)
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
示例代码:
public class OperationFactory //简单运算工厂类 { public Operation CreateOperate(string operate) //返回Operation类型的CreateOperate方法语句 { Operation oper = null; switch (operate) { case "+": oper = new OperateAdd(); break ; case "-": oper = new OperateSub(); break; case "*": oper = new OperateMul(); break; case "/": oper = new OperateDiv(); break; } return oper; }
客户端的代码是:
Operation oper;oper = OperationFactory.CreateOperate("+");oper.NumberA=1;oper.NumberB=2;double result=oper.GetResult();
至此,代码结束了。通过以上的代码,我们可以发现简单工厂模式其实也是有利也有弊的。
利:
1.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,明确了各自的职责和权利,有利于整个软件体系结构的优化;
2.由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则;
3.将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
弊:
1.当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。
建议使用情况:
1.工厂类负责创建的对象比较少;
2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
3.由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
简单工厂模式虽不是23种设计模式中的一种,但是它对于编程人员的代码规范还是有一定启迪的。我们不能只满足于写完代码运行结果正确就完事,编程是一门技术,更是一门艺术,写出可维护、可复用、可扩展和灵活性好的代码,应是我们不断地追求。
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- 我的日志小窝开始啦
- Aix双机配置简化版
- 寒假集训作业(3)——栈与队列
- iphone上让方形的图片圆角显示
- Telnet协议
- 简单工厂模式
- linux下的硬链接和符号链接
- 图像工作回顾之五:视频检索
- vmware linux中vmware tools安装
- 开始stm32
- ORACLE 常用技巧(持续更新ing)
- 图像处理和计算机视觉中的经典论文
- 在android2.3.4samgsung 210下编译ramdisk-recovery-uboot.img实现恢复出厂设置
- Splitcontainercontrol 设置水平或垂直