抽象工厂模式
定义:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
工厂方法是生产一种产品,抽象工厂是生产一个产品族。
结构图:
代码:
果蔬工厂(分为北方果蔬和热带产果蔬)
//两种抽象产品:水果、蔬菜
Class Fruit
{
}
Class Veggie
{
}
//四种具体产品:北方水果,热带水果,北方蔬菜,热带蔬菜
//北方水果
Class NorthernFruit : Fruit
{
。。。;
}
//热带水果
Class TropicalFruit : Fruit
{
。。。;
}
//北方蔬菜
class NorthernVeggie : Veggie
{
。。。;
}
//热带蔬菜
class TropicalVeggie : Veggie
{
。。。;
}
//抽象果蔬工厂
Class Gardener
{
public Fruit createFruit();
public Veggie createVeggie();
}
//具体工厂:北方果蔬工厂,热带果蔬工厂
//北方果蔬工厂负责生产北方果蔬(产品族)
class NorthernGardener : Gardener
{
public Fruit createFruit)
{
return new NorthernFruit();
}
public Veggie createVeggie(String name)
{
return new NorthernVeggie();
}
}
//热带果蔬工厂负责生产热带果蔬(产品族)
Class TropicalGardener : Gardener
{
public Fruit createFruit()
{
return new TropicalFruit();
}
public Veggie createVeggie()
{
return new TropicalVeggie();
}
}
//客户端
Gardener* cGardener = new NorthernGardener();//北方果蔬工厂(只生产北方果蔬产品)
Fruit* cFruit = cGardener->createFruit();//北方水果产品实例
Veggie* cVeggie = cGardener->createVeggie();//北方蔬菜产品实例
使用时机:
系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
优点:
1.使得创建过程和客户端分离。
2.易于交换产品系列
3.它有利于产品的一致性
缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。