c++设计模式学习笔记(一)
1. Factory 模式
Factory设计模式是主要是为了方便对象的创建而建立的,封装了对对象的创建。这样我们就能通过调用ConcreteFactory中的CreateProduct ()方法创建一个Product 子类对象,而不需要过多的继承。Factory 模式主要适合要创建的对象属于一类,如果要创建的对象不属于一类,那么就要用到AbstractFactory模式。
类的调用:
Factory f = new ConcreteFactory();
Product p = f->CreateProduct();
可能遇到的问题:如果Product有很多子类
解决方法:1。 为每一个Product子类再Factory中添加一个方法,这样Factory类永远不会关闭。2。创建一个Factory类的子类,利用方法的多态性进行操作。
2. AbstractFactory模式
AbstractFactory模式主要是为了给一组(多种类)提供创建的封装接口,而Factory是为一个种类的类提供创建的封装接口。AbstractFactory通常是通过Factory模式实现。
类的调用:
AbstractFactory f = new ConcreteFactory1();
f->CreateProductA1();
f->CreateProductB1();
3. Singleton 模式
Singleton模式主要是通过维护一个static 变量来产生唯一的对象实例。该模式经常和Factory模式一块使用,因为Factory 类经常只需要一个实例对象。
代码实现:
Singleton.h:
#ifndef _SINGLETON_H
#define _SINGLETON_H
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton *_instance;
};
#endif
Singleton.cpp:
#include "Singleton.h"
Singleton* Singleton::_instance = 0;
Singleton::Singleton()
{
cout<<"Singleton..."<<endl;
}
Singleton* Singleton::Instance()
{
if(_instance == 0)
{
_instance = new Singleton();
}
return _instance;
}
int main()
{
Singleton *single = Singleton::Instance();
Singleton *single1 = Singleton::Instance();
if(single == single1)
{
cout<<"the same Singleton..."<<endl;
}
return 0;
}