posts - 0,  comments - 3,  trackbacks - 0

抽象工厂模式面对的问题是多个产品等级结构的设计。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象。先看一下UML:

在上图中,假设农场现在可以生产水果和蔬菜,从地域上划分,又分为南方和北方。所以产品等级图分为:南方水果,南方蔬菜,北方水果,北方蔬菜;抽象工厂模式与工厂方法模式最大的区别在于:工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构。

  有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。 每个产品等级结构中有多少具体产品,就有多少个产品族,也就会在工厂等级结构中发现多少个具体工厂;例如在上图中,产品等级结构:蔬菜(vegetable)和水果(Fruit),相应的工厂角色中就有public Fruit createFruit()和public Vegetable CreateVegetable()方法。有2个产品族:North和South,对应两个具体工厂,NorthFactory和SouthFactory;
关于抽象模式和开闭原则:

当增加产品等级结构时,即当我们增加一个新产品:花卉时,需要修改工厂角色的工厂方法,这显然是不支持开闭原则的;

当增加产品族时,即添加了新的产品角色,这时,只需添加新的工厂角色就可以了,符合开闭原则;

工厂模式的变通:工厂的工厂

可以把简单工厂模式应用到抽象工厂中,抽象工厂类可以配备静态方法,根据需要返回相应的工厂角色。返回值应该是抽象工厂类型,这样才能保证多态性。下面是一个按照此方法改进的 抽象工厂模式UML

posted on 2007-07-01 10:19 李桢 阅读(438) 评论(0)  编辑  收藏 所属分类: java设计模式
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(1)

文章分类

文章档案

搜索

  •  

最新评论