工厂模式之——工厂方法模式
定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
相比于简单工厂消去了内部判断逻辑,遵守了开放封闭原则。但是代码量和逻辑复杂度更高了。
结构图:
代码:水果工厂
(父类)水果类:
Class Fruit
{
。。。
}
(子类)苹果类:
Class Apple : Fruit
{
。。。
}
水果工厂抽象类:
Class FruitFactory
{
//生产水果抽象方法
}
苹果工厂子类:
Class AppleFactory : FruitFactory
{
//生产苹果方法
}
客户端:
FruitFactory CFruitFactory = new AppleFactory();//如果要生产草莓,加一个草莓工厂,一个草莓水果子类,这里换成new StrawberryFactory()就行了。
Fruit* CFruit = CFruitFactory.CreateFruitFactory();//苹果对象生产完成
使用时机:
可以和简单工厂互相替换,需要根据具体项目而定。二者各有优缺点,就原则来说,工厂方法模式更好。
优点:克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。
缺点:产品和工厂类成对增加,增加额外开发量、工程复杂度、编译速度。