工厂模式 用法 补充 & 与抽象工厂区别

在WIKI中重新看了一下抽象工厂模式(http://en.wikipedia.org/wiki/Abstract_factory),其中有一句关于 工厂 的信息特别有重要:

 

In software development, a Factory is the location in the code at which objects are constructed. The intent in employing the pattern is to insulate the creation of objects from their usage. This allows for new derived types to be introduced with no change to the code that uses the base class.

 

再次强调下 工厂 的相关信息:

1。工厂用于生成实例

工厂可以生成多种多样的实例了,具体生成什么实例,调用方不需要知道(调用方不就是为了这个效果吗?!效果是什么?代码隔离,减少复杂度)

2。调用方代码与实例生成代码 隔离

我个人的理解,这里的隔离最终还是为了第一点:不需要考虑生成什么实例了。不隔离怎么保证生成实例对调用方透明呢?!

这一点在我以前的BLOG有说明。

3。虽然是不同的实例返回,但调用方不需要为此作更改。

通过继承,虚拟的方式实现这一功能

 

所以,当你准备使用工厂模式时,可以拿这三点对照一下。

 

 

 

抽象工厂模式与工厂模式有什么不同,先看看UML图

Abstract Factory:

AF

 

从UML图看,它从Factory要复杂的多,一般的工厂模式UML图如下:

f

 

 

抽象工厂在上图的 FactoryCreator 部分又增加了一层,把工厂也做了一次抽象。

一般,一个工厂生产的产品,如果类型很简单(如:面包店,生成不同种类的面包),则只需要一个工厂(面包工厂),就可以了

 

 

 

而抽象工厂的模式要解决: 当工厂也存在许多不同的种类时 一种方法。

如上面的例子,现在我们要增加不同的面包生厂工厂,就变为如下:

 

 

 

所以,抽象工厂其实只是工厂模式的一个增强,可以理解为:在一个简单工厂模式上面再加一个工厂模式。如上面的例子,如果,在全国各地都有工厂,那就需要再加一个工厂了:

 

 

呵呵,现在,已经绝对的是:一个工厂上面再加一个工厂了!!

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值