原理:

 在工厂类中,通过多态,实例出子类对象,返回父类。客户端只依赖父类和工厂类,不依赖子类;但需要知道所有子类,以决定实例化哪个子类对象。

举例:水果工厂

  (父类)水果类:

Class Fruit

{

  。。。

}

  子类)苹果类:

Class Apple : Fruit

{

。。。

}

  (子类)草莓类:

Class Strawberry : Fruit

{

。。。

}

  水果工厂类:

Class FruitFactory

{

//可生产水果类型

typedef enum TagEnumFruit

{

Apple ,

Strawberry ,

FruitEnd,

}EnumFruit;

//生产方法

Fruit*         CreateFruitFactory(EnumFruit FruitType)
{
  switch(FruitType)
  {
    case Apple :
      return new Apple();
    case Strawberry :
      return new Strawberry();  
    default :
      return null;
  }
}

}

客户端:

Fruit* CFruit = null;

CFruit = FruitFactory.CreateFruitFactory(Apple );//苹果对象生产完成

 

优点:封装类产品子类,当需要增加或者修改产品只需要对子类进行增加或者修改,同时修改工厂类的switch-case就ok了。

缺点:违背开放-封闭原则,每次增改都需要修改工厂类。并且需要对客户暴露所有产品。

 

版权声明:本文为haosk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/haosk/p/13302870.html