设计形式之工厂模式、抽象工厂模式、单例模式(C++代码)
设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
这里只列举了一个产品,可以自行扩展多个产品,比如产品都有:香蕉、苹果、橘子等等。指需要通知一声工厂,工厂就会调用相应的 生产香蕉、生产苹果、生产橘子等函数、而客户不需要知道生产这些水果的具体过程。坐着等吃就行。
三:单例模式
设计模式的重要性就不用多说了。各种设计模式在实际项目中用的是比比皆是。
一:简单工厂模式和工厂模式
懂得一点UML,一看这幅类图,就知道工厂模式是用来干嘛的,说白了,就是提供一个抽象的基类接口,使得用户不用记住具体的要成成的新的类的名字。
下面 看一段代码:
#include<iostream> #include<string> #include<vector> using namespace std; class Product { public: Product(){} ~Product(){}; }; class ProductA:public Product { public: ProductA(){cout<<"ProductA"<<endl;} ~ProductA(){} }; class Factory { public: Factory(){} ~Factory(){} ProductA* createProductA() { return new ProductA(); } }; int main() { Factory f;//简单工厂模式 ProductA* pa=f.createProductA(); system("pause"); return 0; }
这里只列举了一个产品,可以自行扩展多个产品,比如产品都有:香蕉、苹果、橘子等等。指需要通知一声工厂,工厂就会调用相应的 生产香蕉、生产苹果、生产橘子等函数、而客户不需要知道生产这些水果的具体过程。坐着等吃就行。
工厂模式的类图如下,具体代码省。。
二 :抽象工厂模式
上面 所讲的工厂模式还不够抽象,因为只有产品抽象了,工厂并未抽象,上面所讲的是一个工厂生产了所有需要的产品,但是,你想想,假设HTC厂家生产HTC手机、HTC电池、诺基亚手机。。。你觉得很奇怪吗, 这个时候就需要抽象工厂模式来解决了,HTC应该生产HTC旗下的产品、苹果生产苹果系列的产品,这样管理起来也方便。
看看代码例子:
#include<iostream> #include<string> #include<vector> using namespace std; class AbstractPruduct { public: AbstractPruduct(){} ~AbstractPruduct(){} virtual void print()=0; }; class ProductA:public AbstractPruduct { public: ProductA(){cout<<"ProductA"<<endl;} ~ProductA(){} void print() { cout<<"I'm ProductA"<<endl; } }; class ProductB:public AbstractPruduct { public: ProductB(){cout<<"ProductB"<<endl;} ~ProductB(){} void print() { cout<<"I'm ProductB"<<endl; } }; class AbstractFactory { public: AbstractFactory(){} ~AbstractFactory(){} }; class FactoryA:public AbstractFactory { public: FactoryA(){cout<<"FactoryA"<<endl;} ~FactoryA(){} ProductA* createProduct() { return new ProductA(); } }; class FactoryB:public AbstractFactory { public: FactoryB(){cout<<"FactoryB"<<endl;} ~FactoryB(){} ProductB* createProduct() { return new ProductB(); } }; int main() { FactoryB fa; //抽象工厂模式 AbstractPruduct* ap=fa.createProduct(); ap->print(); system("pause"); return 0; }
实际工作中,需要配置一个XML配置文件,这样就可以与客户达到一个很好交互性,客户又不需要知道具体的逻辑实现,只需要配置文本文件,就能达到预期的效果了
三:单例模式
单例模式很常见,比如我们电脑的任务管理器就使用了单例模式。
当我们需要共享数据或需要数据同步的时候可以考虑使用单例模式。
具体代码如下:
#include<iostream> #include<string> #include<vector> using namespace std; class Singleton { public: ~Singleton(){} static Singleton* Instance(); private: Singleton(){cout<<"Singleton初始化"<<endl;} static Singleton* st; }; Singleton* Singleton::st=NULL; Singleton* Singleton::Instance() { if(st==NULL) { st=new Singleton(); } return st; } int main() { Singleton *ss=Singleton::Instance();//单例模式 Singleton *sss=Singleton::Instance();//这里将用到上面的提供的指针 system("pause"); return 0; }