|
方法一: namespace designpattern_singleton { // class singleton class singleton { protected: singleton() {} static singleton *_instance ; private: singleton(const singleton&) ; singleton& operator=(const singleton&) ; } ; singleton* singleton::_instance = null ;
// class concretesingleton class concretesingleton : public singleton { public: static singleton* instance() ; protected: concretesingleton() {} } ;
singleton* concretesingleton::instance() { (_instance == null) ? _instance = new concretesingleton() : 0 ; return _instance ; } }
客户端代码: { using namespace designpattern_singleton ; singleton *p = concretesingleton::instance() ; }
方法二: namespace designpattern_singleton { // class singleton class singleton { protected: singleton() {} private: singleton(const singleton&) ; singleton& operator=(const singleton&) ; } ;
// class concretesingleton class concretesingleton : public singleton { public: static singleton* instance() { static concretesingleton _instance ; return &_instance ; } protected: concretesingleton() {} } ; }
客户端代码: { using namespace designpattern_singleton ; singleton *p = concretesingleton::instance() ; }
方法三: namespace designpattern_singleton { template < class t > class singleton { public: static t* instance() { static t _instance ; return &_instance ; } protected: singleton() {} private: singleton(const singleton &) ; singleton& operator=(const singleton&) ; } ;
class concretesingleton : public singleton< concretesingleton > {} ; }
客户端代码 { using namespace designpattern_singleton ;
concretesingleton *p = concretesingleton::instance() ; } |