CafeM0ca

[디자인패턴]싱글톤 본문

Programming/디자인패턴

[디자인패턴]싱글톤

M0ca 2018. 1. 22. 09:33
반응형

싱글톤 패턴(singleton pattern)

생성자가 여러차례 호출되더라도 실제로 생성되는 객체는 하나다. 최초의 생성자가 생성된 이후, 생성자는 최초의 객체를 리턴한다.

더 자세한건 pdf로 확인바람!

singleton.pdf
535.8 kB

#include <thread>
#include <mutex>
#include <iostream>
using namespace std;


class Singleton{
public:
    static Singleton* getInstance(){
        if(mInstance == nullptr){
            std::lock_guard<std::mutex> guard(mtx);
            if(mInstance == nullptr){
                mInstance = new Singleton();
            }
        }
        return mInstance;
    }
    void add(){ data++; }
    int getData() const { return data; }
private:
    Singleton(){} // 생성자
    static std::mutex mtx;
    static atomic<Singleton> *mInstance;
    int data = 0;
};

std::mutex Singleton::mtx;
Singleton* Singleton::mInstance = nullptr;


int main()
{
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();
    Singleton *s3 = Singleton::getInstance();

    cout << "s1 data: " << s1->getData() << '\n';
    cout << "s2 data: " << s2->getData() << '\n';
    cout << "s3 data: " << s3->getData() << '\n';

    s1->add();
    s2->add();
    s3->add();

    cout << "s1 data: " << s1->getData() << '\n';
    cout << "s2 data: " << s2->getData() << '\n';
    cout << "s3 data: " << s3->getData() << '\n';

    return 0;
}
반응형

'Programming > 디자인패턴' 카테고리의 다른 글

[디자인패턴] Bridge 패턴  (0) 2020.12.05
[디자인패턴] reverse OOP  (0) 2018.07.01
Comments