Singleton

来源:互联网 发布:深圳奇点网络 编辑:程序博客网 时间:2024/05/01 19:53

      这个应该是最简单的一个设计模式,记得当初在学校学习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; }
};
原创粉丝点击