看了果凍兄的部落格,發現大家對裡面的乙個實現有一些不同的見解,貼出來記錄一下,其博文如下
共享模式的主要想法就是:運用共享技術有效地支援大量細粒度的物件。所以應該將物件的外部特徵由更高一級的物件來管理。在原文中,博主將棋子的外部特徵(座標)作為了棋子的乙個屬性來管理,又在棋盤類中採用覆蓋的方法來每一次新增共享模式棋子時,重新整理其座標,再記錄之。感覺重新整理的這一步有點多餘,所以我去掉了棋子的座標屬性,直接在記錄時新增了座標資訊。不過這樣做的缺點就是,座標屬性在類的實現中體現的不夠明顯,是否有違設計的原則呢?後面再查查資料,或者如有大神看到,還望解答。
**分別如下:
果凍兄**:
#include #include #include using namespace std;
typedef struct pointtag
pointtag(int a, int b)
bool operator <(const pointtag& other) const
else if (x == other.x)
return false;
}}point;
typedef enum piececolortag
piececolor;
class cpiece
piececolor getcolor()
// set the external state
void setpoint(point point)
point getpoint()
protected:
// internal state
piececolor m_color;
// external state
point m_point;
};class cgomoku : public cpiece
};class cpiecefactory
else
}if (ppiece == null)
} return ppiece;
}
~cpiecefactory()
} }
private:
vectorm_vecpiece;
};class cchessboard
if (ppiecefactory != null)
}
我改了後的:
...
class cpiece
piececolor getcolor()
protected:
// internal state
piececolor m_color;
};class cgomoku : public cpiece
};class cpiecefactory
else
}if (ppiece == null)
} return ppiece;
}
~cpiecefactory()
} }
private:
vectorm_vecpiece;
};class cchessboard
設計模式 共享模式
一 共享模式 共享模式 運用共享技術有效的支援大量細粒度的物件 flyweigth類,具有所有享元類的超類或介面 abstract class flyweigth concreteflyweigth是繼承flyweigth超累或實現介面,並為內部狀態增加儲存空間 class concreteflyw...
Python設計模式 三 共享模式
共享模式 class borg 共享狀態 shared state def init self self.dict self.shared state self.state 初始化 當你列印乙個類的時候,那麼print首先呼叫的就是類裡面的定義的 str 當列印borg的乙個例項的時候,str 函式...
共享模式 專有模式
概念 適用場景 通用引數 local listener pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,要想讓pmon動態註冊listener,需要設定local listener引數。listener networks 配置多個remote listene...