定义:

 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

   相比于简单工厂消去了内部判断逻辑,遵守了开放封闭原则。但是代码量和逻辑复杂度更高了。

结构图:

   

 

代码:水果工厂

(父类)水果类:

Class Fruit

{

  。。。

}

(子类)苹果类:

Class Apple : Fruit

{

。。。

}

水果工厂抽象类:

Class FruitFactory

{

//生产水果抽象方法

Fruit*       CreateFruitFactory();

}

苹果工厂子类:

Class AppleFactory : FruitFactory

{

//生产苹果方法

Fruit*       CreateFruitFactory()
{
  return new Apple(); 
}

}

客户端:

FruitFactory CFruitFactory = new AppleFactory();//如果要生产草莓,加一个草莓工厂,一个草莓水果子类,这里换成new StrawberryFactory()就行了。

Fruit* CFruit = CFruitFactory.CreateFruitFactory();//苹果对象生产完成

 

使用时机:

  可以和简单工厂互相替换,需要根据具体项目而定。二者各有优缺点,就原则来说,工厂方法模式更好。

 

优点:克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。

缺点:产品和工厂类成对增加,增加额外开发量、工程复杂度、编译速度。

 

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