最近工作原因,需要使用工厂模式生成Log产生机制,因此简单学习并总结了工厂模式。
工厂模式分三类:简单工厂模式、工厂方法模式和抽象工厂模式
简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。举例说明:A公司有一个工厂能够生产Class1和Class2两种不同的商品。商人B希望A公司生产某种商品只需向A公司说明需要生产那个商品即可。
示例代码:
1 enum CTYPE{COREA,COREB}; 2 3 class SingleCore 4 { 5 public: 6 virtual void show() = 0; 7 }; 8 9 class SingleCoreA:public SingleCore 10 { 11 public: 12 void show(){ cout << "SingleCore A" << endl; } 13 }; 14 15 class SingleCoreB:public SingleCore 16 { 17 public: 18 void show(){ cout << "SingleCore B" << endl; } 19 }; 20 21 class Factory 22 { 23 public: 24 SingleCore* CreateSingleCore(enum CTYPE ctype) 25 { 26 if (COREA==ctype) 27 return new SingleCoreA(); 28 else if (COREB==ctype) 29 return new SingleCoreB(); 30 else 31 return nullptr; 32 } 33 }; 34 35 int main() 36 { 37 Factory factoryTemp; 38 SingleCore* core = factoryTemp.CreateSingleCore(COREA); 39 core->show(); 40 core = factoryTemp.CreateSingleCore(COREB); 41 core->show(); 42 system("pause"); 43 return 0; 44 45 }简单工厂模式的弊端是若向增加一种类型(比如B希望A生产Class3商品),则必须修改Factory类,不满足开放封闭原则。 工厂方法模式:是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类;简单理解就是A公司开了两间工厂Factory1和Factory2分别生产商品1和商品2,商人B只需到对应工厂即可,而不需告诉A需要生产什么商品。示例代码:
1 class SingleCore 2 { 3 public: 4 virtual void Show() = 0; 5 }; 6 //单核A 7 class SingleCoreA : public SingleCore 8 { 9 public: 10 void Show() { cout << "SingleCore A" << endl; } 11 }; 12 //单核B 13 class SingleCoreB : public SingleCore 14 { 15 public: 16 void Show() { cout << "SingleCore B" << endl; } 17 }; 18 class Factory 19 { 20 public: 21 virtual SingleCore* CreateSingleCore() = 0; 22 }; 23 //生产A核的工厂 24 class FactoryA : public Factory 25 { 26 public: 27 SingleCoreA* CreateSingleCore() { return new SingleCoreA(); } 28 }; 29 //生产B核的工厂 30 class FactoryB : public Factory 31 { 32 public: 33 SingleCoreB* CreateSingleCore() { return new SingleCoreB(); } 34 }; 35 36 int main() 37 { 38 FactoryA factoryA; ///构建A工厂类 39 SingleCore* core = factoryA.CreateSingleCore(); 40 core->Show(); 41 FactoryB factoryB; 42 core = factoryB.CreateSingleCore(); 43 core->Show(); 44 system("pause"); 45 return 0; 46 47 }
工厂方法模式的缺点是需要为每个商品子类建立一个工厂子类
抽象工厂模式:为创建一组相关或者依赖的对象提供一个接口,且无需指定他们的具体类
时间: 2024-10-20 02:09:17