单例模式
保证一个类仅有一个实例,并提供一个该实例的全局访问点。
template<typename T>
class Singleton {
public:
static T& GetInstance() {
static T instance;
return instance;
}
protected:
virtual ~Singleton() {
}
Singleton() {
}
private:
Singleton(const Singleton &) = delete; //拷⻉构造
Singleton& operator=(const Singleton&) = delete;//拷贝赋值构造
Singleton(Singleton &&) = delete;//移动构造
Singleton& operator=(Singleton &&) = delete;//移动拷贝构造
};
class DesignPattern : public
Singleton<DesignPattern> {
friend class Singleton<DesignPattern>;
private:
DesignPattern() {
}
~DesignPattern() {
}
};
工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。用于实现一个导出数据的接口,让客户选择数据的导出方式。
抽象工厂
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。用于实现一个拥有导出导入数据的接口,让客户选择数据的导出导入方式
装饰器
动态地给一个对象增加一些额外的职责。就增加功能而言,装饰器模式比生产子类更为灵活。
组合模式
将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性