设计模式的重要性就不用多说了。各种设计模式在实际项目中用的是比比皆是。
一:简单工厂模式和工厂模式
懂得一点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;
- }