A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李江 中级黑马   /  2013-10-12 08:58  /  1473 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

前面我们介绍了简单工厂,工厂方法模式,这节来看看抽象工厂模式,抽象工厂模式(Abstract Factory)是工厂方法里面最为抽象和最具一般性的形态,是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。抽象工厂模式和工厂方法模式的最大区别在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品族,从而使得产品具有二维性质。抽象工厂模式的一般示意类图如下:


下面我们先看抽象工厂的角色都有哪些:
抽象工厂(Creator)角色:是抽象工厂模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

如果你很留心,你就发现抽象工厂的角色和工厂方法的角色一样,其实抽象工厂就是在工厂方法的基础上进一步推广。
下面我们来举实例说明,我们还是延续车的例子,我们说我们原有的造车厂扩建,分东北重工厂和华北机械厂,这两个厂都可以造拖拉机,汽车,火车,但是他们在工艺和品牌上都有所不同,我们抽象出以下模型:


通过上图,我们可以看出,我们系统模型中有个两个产品族,一个产品族是东北重工厂产出的所有产品,另一个产品族是华北机械厂生产出的所有产品。我们也可以看出有多少个实现工厂就有多少个产品族,在工厂角色中有多少工厂方法在同一个产品族类就有多少个具体产品。


3 个回复

倒序浏览
xh396660787 发表于 2013-10-12 10:21
·我有个疑问,当出现了一种新的类型的机车,比如说摩托,继承自车接口。那么就会有华北摩托,东北摩托。那 ...

工厂设计前你得先考虑有哪些功能,不建议修改源码,摩托可以在自己的内部实现自己的属性和功能.工厂设计好之后就不建议再去动了...
回复 使用道具 举报
之前在学校学习uml建模,感觉就是在画画,画产品的关系,没有感觉出是什么模式~一头雾水的
回复 使用道具 举报
受教 有代码会更好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马