provide interface for creating family of related or dependent objects without specifying their concrete classes
define interface for creating an object, but let subclass decide which class to instantiate
virtual constructor
ensure a class has only one instance and provide a global point of access
// .h file class Singleton { public: static Singleton instance(); protected:limit access
Singleton(); private: static Singleton* _instance; }; // .c file Singleton* Singleton::_instance = 0; Singleton* Singleton::instance() { if (_instance == 0) _instance = new Singleton(); return _instance; }
specify kinds of objects to create using a prototypical instance and create by copying this prototype