简单工场、工场方法、抽象工厂模式浅析
来源:互联网 发布:远场sar成像算法 编辑:程序博客网 时间:2024/06/05 15:33
简单工厂模式
当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的Product
例如在大话设计模式P11给的运算工厂例子:
public static Operation createOperate(string operate){Operation oper = null;12switch (operate){case "+":{oper = new OperationAdd();break;}case "-":{oper = new OperationSub();break;}case "*":{oper = new OperationMul();break;}case "/":{oper = new OperationDiv();break;}}return oper;}}
调用工厂,需要createOperator("/"),就能返回除法运算符。
优点:客户端不需要修改代码。
缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。
工厂方法模式
UML类图如下:
这个和简单工厂有区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂
好处:增加一个运算类(例如N次方类),只需要增加运算类和相对应的工厂,两个类,不需要修改工厂类。
缺点:增加运算类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行。
抽象工厂模式:
UML类图如下:
从图上可以看出这和工厂方法模式很相似,但是呢,有几个区别:
抽象工厂模式,一个具体工厂可以制造几个产品,例如微软工厂(相当于SqlserverFactory)可以制造微软鼠标(属于鼠标类,鼠标类下面有惠普鼠标,微软鼠标等,相当于上图中的IDepartment下面的SqlserverDepartment和AccessDepartment),也可以制造微软键盘(属于键盘类,键盘类下面有惠普键盘,微软键盘等,相当于上图中的IUser下面的SqlserverUser和AccessUser)。
引用http://blog.csdn.net/wangwenhui11/article/details/3955125中的话:
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
优点:易于交换产品系列,例如Access和SQLServer数据库之间切换。
缺点:例如增加一个机箱产品,不仅需要添加三个类“机箱类,微软机箱,惠普机箱”,还要修改惠普工厂,微软工厂支持制造机箱。而添加一个联想工厂的时候,只需要添加三个类,使用联想工厂还是要修改客户端代码的。
在《大话设计模式》中,提出用简单工厂模式改进抽象工厂模式的方法。
DataAccess的代码如下:
这样,在DataAccess里面直接指定数据库(指定品牌),当需要换数据库(or 品牌)的时候,修改DataAccess内的代码。
当然可以用反射方法修改数据库,这样,只需要修改配置文件。就完美的改善了抽象工厂的缺点,而且在客户端不用修改代码。
反射实现:
要修改db属性:
http://www.cnblogs.com/zhangchenliang/archive/2017/06.html
- 简单工场、工场方法、抽象工厂模式浅析
- 【设计模式】工场模式 || 抽象工厂 || 观察者模式 || 代理模式
- 工场设计模式和抽象工厂设计模式
- 设计模式---抽象工场模式
- 设计模式---简单工场模式
- 设计模式-简单工场模式
- 设计模式---工场方法模式
- 工场模式
- 工场模式
- 设计模式 一 简单工场模式
- android设计模式--简单工场模式
- 创建型模式之简单工场模式
- C# 设计模式-工场方法模式
- Java设计模式(一)普通工场模式 抽象工场模式
- 设计模式——《大话设计模式》——简单工厂模式+策略模式+策略与简单工场结合
- 设计模式-工场模式
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- UVALive 4128 Steam Roller
- Rxjava
- Servlet教程____Servlet简介和工作原理
- JVM内存模型你只要看这一篇就够了
- HTTP Status 403
- 简单工场、工场方法、抽象工厂模式浅析
- 一、面向对象的六大原则
- C语言 static 解析
- AtCoder Grand Contest 017做题记录
- 客户需求解密板子里面的加密文件,qt做的openssl的加解密的tool
- 机顶盒操作时常用的一些基本命令
- Codeforces 514C Watto And Mechanism 哈希
- PHP入门必选
- PS中jpg、png和psd格式