C++工厂方法模式 C++设计模式之工厂方法模式的实现及优缺点
WhiteShirtI 人气:0想了解C++设计模式之工厂方法模式的实现及优缺点的相关内容吗,WhiteShirtI在本文为您仔细讲解C++工厂方法模式的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:c++工厂方法模式,工厂模式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; }
运行结果:
总结
加载全部内容