工厂模式之——工厂方法模式

Posted haosk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式之——工厂方法模式相关的知识,希望对你有一定的参考价值。

定义:

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

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

结构图:

   技术图片

 

代码:水果工厂

(父类)水果类:

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();//苹果对象生产完成

 

使用时机:

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

 

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

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

 

以上是关于工厂模式之——工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法模式

设计模式之工厂方法模式

设计模式之工厂方法模式

设计模式之工厂模式-工厂方法(02)

GoF 23种设计模式之简单工厂模式工厂方法模式和抽象工厂模式

PHP设计模式—工厂模式之工厂方法模式