设计模式-singleton

定义

Singleton设计模式是一种责任型模式,它通过隐藏构造器并提供一个对创建对象的单个访问点,确保某个类只有一个实例,并且提供了一个全局访问点。这种模式的宗旨是集中类的职责——创建一个担当独一无二角色的对象(生产唯一实例)。

实现举例

用C++(c++11)实现Singleton设计模式的示例代码:

#include 
#include 

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; // 输出10

    singleton2.setValue(20);
    std::cout << singleton1.getValue() << std::endl; // 输出20

    return 0;
}

代码中使用std::call_once来保证只有一个线程可以初始化单例对象。

总结

Singleton设计模式以下特性:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

这种模式的宗旨是集中类的职责——创建一个担当独一无二角色的对象(生产唯一实例)——在类的单个实例中。如果有讲的不对,可以评论留言,一起学习

你可能感兴趣的:(设计模式,单例模式,设计模式,C++)