'Developer/Design Patterns'에 해당되는 글 27건

  1. 2014.05.17 템플릿 상속을 이용한 싱글톤 패턴

#include <iostream>

using namespace std;

 

class Mutex {

public:

        void lock() {

               cout << "Mutex::lock " << endl;

        }

 

        void unlock() {

               cout << "Mutex::unlock " << endl;

        }

};

 

template<typename T> class ScopeLock {

        T& obj;

 

public:

        ScopeLock(T* o) : obj(*o) { obj.lock(); }

        ScopeLock(T& o) : obj(o)  { obj.lock(); }

        ~ScopeLock() { obj.unlock(); }

};

 

// 템플릿 상속을 사용하면 탬플릿의 인자로 유저의 심볼을 인자로 받을 있으므로

// 미래의 사용자가 사용하게 심벌의 처리할 있다.

template<typename T> class SingleTon {

private:

        SingleTon(const SingleTon&);

        SingleTon& operator=(const SingleTon);

 

protected:

        // 자식 클래스만 객체를 생성할 있도록 protected 생성자 추가

        SingleTon() {}

 

        static T* sInstance;

        static Mutex mutex;

 

public:

        static T& getInstance() {

               ScopeLock<Mutex> sl(mutex);          

               if(sInstance==0)

                       sInstance=new T;             

               return *sInstance;

        }

};

template<typename T> T*       SingleTon<T>::sInstance = 0;

template<typename T> Mutex    SingleTon<T>::mutex;

 

 

class Cursor : public SingleTon<Cursor> {};

 

Cursor* Cursor::sInstance;

Mutex Cursor::mutex;

 

int main(void) {

        Cursor& c1 = Cursor::getInstance();

        Cursor& c2 = Cursor::getInstance();

 

        cout << "&c1 = " << &c1 << endl;

        cout << "&c2 = " << &c2 << endl;

        return 0;

}

Posted by No names
,