设计模式-singleton
定义
Singleton设计模式是一种责任型模式,它通过隐藏构造器并提供一个对创建对象的单个访问点,确保某个类只有一个实例,并且提供了一个全局访问点。这种模式的宗旨是集中类的职责——创建一个担当独一无二角色的对象(生产唯一实例)。
实现举例
用C++(c++11)实现Singleton设计模式的示例代码:
#include <iostream>
#include <mutex>class Singleton {
public:static Singleton& getInstance() {std::call_once(initInstanceFlag, &Singleton::initSingleton);return *instance;}void setValue(int value) {this->value = value;}int getValue() const {return value;}private:Singleton() {}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;static void initSingleton() {instance = new Singleton();}int value;static Singleton* instance;static std::once_flag initInstanceFlag;
};Singleton* Singleton::instance = nullptr;
std::once_flag Singleton::initInstanceFlag;int main() {Singleton& singleton1 = Singleton::getInstance();Singleton& singleton2 = Singleton::getInstance();singleton1.setValue(10);std::cout << singleton2.getValue() << std::endl; // 输出10singleton2.setValue(20);std::cout << singleton1.getValue() << std::endl; // 输出20return 0;
}
代码中使用std::call_once
来保证只有一个线程可以初始化单例对象。
总结
Singleton设计模式以下特性:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
这种模式的宗旨是集中类的职责——创建一个担当独一无二角色的对象(生产唯一实例)——在类的单个实例中。如果有讲的不对,可以评论留言,一起学习