谈谈单例模式(二)

几天没有写东西了,不过发现写些有内涵的东西的却不容易,也许是自己的功力还不够。话不多说,开干。
前面谈了单例的使用条件以及创建单例的基本范例(基于C++),今天就来谈谈单例的继承。单例继承一般用于跨平台,或者其他需要单例类内部封装不同,而对外提供一致性的地方。所以第一步就是抽象出接口,也就是对外提供一致性。第二步就是子类来实现接口功能,也就是做区分。那么第三步就是创建实体,怎么来创建。请看下面的代码示例:

//第一步:创建基类的抽象接口
class MySystem
{
public:
  virtual ~MySystem() {}
  virtual int* getSomething() = 0;
  virtual void  setSomething(int* thing) = 0;
};
//第二步:创建实现接口的子类
class AndroidSystem : public MySystem
{
public:
    virtual int* getSomething()
    {
        //基于Android的实现
    }
    virtual void setSomething(int* thing)
    {
        //基于Android的实现
    }
}
class IOSSystem : public MySyetem
{
public:
    virtual int* getSomething()
    {
        //基于IOS的实现
    }
    virtual void setSomething(int* thing)
    {
        //基于IOS的实现
    }
}
//第三步:创建单例的唯一实体
class MySyetem
{
public:
    static MySyetem* instance()
    {
#if PLATFORM == ANDROID
        static MySyetem* instance = new AndroidSystem ();
#elif PLATFORM == IOS
        static MySyetem* instance = new IOSSystem ();
#endif

        return instance;
    }

  virtual ~MySyetem() {}
  virtual int* getSomething() = 0;
  virtual void  setSomething(int* thing) = 0;

protected:
  MySyetem() {}
};

每个子类根据不同的平台封装各自的实现。而基类根据不同的平台或者环境创建不同的实例,并对外提供接口的一致性。这样处理使一些跨平台的处理在逻辑上变的简单,明了。职责划分的很清楚。
这两次可能都在谈单例的优点和用法,下一次打算谈谈单例的缺点。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章