抽象工厂模式

定义:

  为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

  工厂方法是生产一种产品,抽象工厂是生产一个产品族。

结构图:

 

 

 

 代码:

果蔬工厂(分为北方果蔬和热带产果蔬)

//两种抽象产品:水果、蔬菜

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.它有利于产品的一致性

缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

posted @ 2020-08-09 13:27  吉尔加斯  阅读(131)  评论(0)    收藏  举报