談談單例模式(二)

幾天沒有寫東西了,不過發現寫些有內涵的東西的卻不容易,也許是自己的功力還不夠。話不多說,開幹。
前面談了單例的使用條件以及創建單例的基本範例(基於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() {}
};

每個子類根據不同的平臺封裝各自的實現。而基類根據不同的平臺或者環境創建不同的實例,並對外提供接口的一致性。這樣處理使一些跨平臺的處理在邏輯上變的簡單,明瞭。職責劃分的很清楚。
這兩次可能都在談單例的優點和用法,下一次打算談談單例的缺點。

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