现在的位置: 首页 > 综合 > 正文

Gof23种设计模式之 – Abstract Factory模式

2012年11月07日 ⁄ 综合 ⁄ 共 915字 ⁄ 字号 评论关闭

不同于singleton模式的实现,singleton模式的实现只使用了面向对象概念中的一个封装,也就是封装了构造函数,不对外可见,对外暴露出一个获取唯一实例的方法,并没有利用到面向对象概念中的继承,多态等高级功能。

abstract factory模式说的是抽象工厂,抽象工厂中继承出了两个实际工厂,这两个实际工厂开始生产对象,两个工厂生产出来的对象风格不同,比如游戏开发中,有一个古典物品工厂,一个现代物品工厂,他们都派生与抽象工厂,都实现了创建计算工具这个方法,而古典工厂中的创建计算工具将返回一个算盘,而现代工厂返回的计算工具是一个计算器,古典工厂中创建的商人是一身汉服的店小二,现代工厂创建的商人是一身西装的小老板,这样在实际游戏中先实例化一个古典工厂,就可以依靠古典工厂得到身穿汉服拿着算盘的店小二,或者依靠现代工厂得到身穿西装拿着计算器的小老板,而不会得到一个身穿汉服却拿着计算器的店小二或者身穿西装而抱着算盘的小老板

这样看来,abstract factory模式最主要的是抽象工厂的实例工厂们可以产生一系列相互依赖或相互协调的对象,abstract factory模式存在的意义就是为了创建各系列的对象而存在的。

abstract factory是为了如果加入新系列的对象可以从容应对,可abstract factory难以从容应对创建新的对象,比如这个时候新加入了一个柜台,这个时候就要新加一个柜台基类,再加松木柜台,玻璃柜台,然后还要在抽象工厂中新加创建柜台,在古典工厂中实现创建柜台并返回松木柜台,在现代工厂中实现创建柜台并返回玻璃柜台,这样就很麻烦。

所以abstract factory抽象工厂模式是用来应对系列对象的扩充,而不是新对象类型的扩充,如果一个经常有新对象类型加入的代码环境中应用的抽象工厂,反而是一种很麻烦的事情。

所以我们就可以总结出一条经验:设计模式误用了不如不用,误用了肯定会弄巧成拙。一定要把面向对象的设计里找到变化点,然后封装变化点。设计模式是为了应对变化的。不变的地方千万不能用设计模式。

抽象工厂的下面是系列工厂,可以生产一系列对象.

抽象工厂模式经常和工厂方法模式配合使用来解决对象创建的需求变化。

抱歉!评论已关闭.