C++设计模式之工厂方法模式的实现及优缺点

工厂方法模式是在简单工厂模式的缺点上进行优化的,我们都知道,在简单工厂模式中,要去增加或者减少一个产品的类型,都需要修改工厂中的if-else判断。这样子显然不符合我们代码开发中的开闭原则,拓展起来也是非常麻烦的

工厂方法模式 = 简单工厂模式 + “开闭原则”

定义思想:工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的就是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类

优点: 不需要记住具体的类名,甚至连具体参数都不需要记住 实现了对象创建和使用的分离 系统的可扩展性变得更好,符合开闭原则 缺点:

系统中的类是成对增加,增加了系统的复杂度和理解度

适用场景:

客户端不需要知道具体产品类的名字,只需要知道其所对应的工厂即可 不关心类的创建和实现的细节

代码实现:(手机产品)

//抽象手机class AbstractPhone{public:virtual void ShowName() = 0;};//华为class Huawei : public AbstractPhone{public:virtual void ShowName(){cout << "Huawei Phone" << endl;}};//小米class Xiaomi : public AbstractPhone{public:virtual void ShowName(){cout << "Xiaomi Phone" << endl;}};//苹果class Apple : public AbstractPhone{public:virtual void ShowName(){cout << "Apple Phone" << endl;}};//抽象工厂class AbstractPhoneFactory{public:virtual AbstractPhone* CreatePhone() = 0;};//华为工厂class HuaweiFactory : public AbstractPhoneFactory{public:virtual AbstractPhone* CreatePhone(){return new Huawei();}};//小米工厂class XiaomiFactory : public AbstractPhoneFactory{public:virtual AbstractPhone* CreatePhone(){return new Xiaomi();}};//苹果工厂class AppleFactory : public AbstractPhoneFactory{public:virtual AbstractPhone* CreatePhone(){return new Apple();}};

测试:

void test(){//创建一个工厂AbstractPhoneFactory* factory = nullptr;//创建一个手机AbstractPhone* phone = nullptr;//指定工厂是华为工厂factory = new HuaweiFactory;//通过华为工厂创建一个手机phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;factory = new XiaomiFactory;phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;factory = new AppleFactory;phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;}

运行结果:

总结

到此这篇关于C++设计模式之工厂方法模式的文章就介绍到这了,更多相关C++工厂方法模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

寂寞的人总是记住生命中出现的每一个人,

C++设计模式之工厂方法模式的实现及优缺点

相关文章:

你感兴趣的文章:

标签云: