Singleton

      这个应该是最简单的一个设计模式,记得当初在学校学习C++时看到这样一个类,当时还觉得这确实是个技巧,但是那会基本上没有实际用到,这次在项目中则到处可见,个人觉得Singleton用到的场合还比较多,基本上叫做**Mgr之类的都是Singleton,当然经验还不足不知道是不是有些地方有滥用,我们项目中用到的是一个#define:

#define SINGLE_INSTANCE(class_name)  /

private: /

    class_name(); /

    class_name(const class_name&); /

    class_name& operator(const class_name&);/

public: /

     static class_name& instance() /

    {static class_name _instance;return _instance;}

这样假如定义了一个类:

class A

{

//这样就是一个Singleton类了

SINGLE_INSTANCE(A)

};

模板形式的更爽:

template<class T> class Singleton {

  Singleton(const Singleton&);

  Singleton& operator=(const Singleton&);

protected:

  Singleton() {}

  virtual ~Singleton() {}

public:

  static T& instance() {

    static T theInstance;

    return theInstance;

  }

};

 

// A sample class to be made into a Singleton

class MyClass : public Singleton<MyClass> {

  int x;

protected:

  friend class Singleton<MyClass>;

  MyClass() { x = 0; }

public:

  void setValue(int n) { x = n; }

  int getValue() const { return x; }

};