文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>笔记 - 关于“工厂”的设计模式

笔记 - 关于“工厂”的设计模式

时间:2011-02-08  来源:FrankFang

之前看过博客园有人说这本书对某些设计模式理解的其实不完全对,而我是按照这本书理解的;如果读者对我的理解有异议,欢迎留言。

简单工厂模式

类图:

 

用法:客户端利用SimpleFactory产生一个具体产品(用AbstractProduct引用),当然这需要客户端传参,但判断逻辑位于SimpleFactory中(如switch语句)。

扩展:若需要增加具体产品E,则须添加ConcreteProductE类,同时修改SimpleFactory。

修改:若需要修改具体产品A,则只需修改ConcreteProductA类。

本书例子:计算器。

工厂方法模式

类图:

 

用法:客户端根据需要的产品选择工厂(实例化具体工厂A,用AbstractFactory引用),再用该工厂制造产品(用AbstractProduct引用)。

扩展:若需要增加具体产品E,则须添加ConcreteProductE类和ConcreteFactoryE。

修改:直接修改相应产品。

本书例子:雷锋。

抽象方法模式

类图:

 

用法:客户端根据需要的产品选择工厂(实例化具体工厂A,用AbstractFactory引用),再用该工厂制造产品(用AbstractProduct引用)。相比而言,抽象工厂模式的好处是易于转换产品的系列(如由A系列转换为B系列)。

扩展:若需要增加产品3A和3B,则除了要增加3个类外还要修改FactoryA和FactoryB。若需要增加产品系列C,除了增加相应的类外,还要增加FactoryC类。

修改:直接修改相应的类。

本书例子:迁移数据库。

抽象方法模式+(与简单工厂模式结合)

类图:

 

用法:客户端不进行判断,而是在SimpleFactory中判断产生A系列还是B系列,这时客户端可能传参了,也可能没传参,SimpleFactory通过自身的字段或属性来决定A系列还是B系列。

扩展:若需要增加产品3A和3B,则除了要增加3个类外还要修改SimpleFactory。若需要增加产品系列C,则需要修改SimpleFactory内部代码(如switch语句)。

修改:直接修改相应的类。

本书例子:迁移数据库。

抽象方法模式++(与简单工厂模式结合,再使用“反射”)

在实例化产品时,选择A系列还是选择B系列其实只是类名不同,此时使用反射技术能很好地避免出现switch语句,同时使设计尽量适合“开放-封闭”原则。

大概的写法是:AbstractProduct1 product = (AbstractProductA)Assembly.Load(“AssemblyName”).CreateInstance(“AssemblyName.Product1A”);

其中,AssemblyName为程序集名称,CreateInstance的参数即我们的变量,我们可以将它存在配置文件中,这样,我们就能完全不修改程序,只修改配置文件来切换数据库类型了。

 

 

说实在的,刚刚学习设计模式,在练习时还没有养成设计模式的意识,今后要多多加强!多多练习!多多写博!

Technorati 标签: 设计模式,工厂
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载