基於設計模式的學習之旅-----享元模式1、 初始享元模式
大家都知道圍棋是啥樣子的,一個棋盤,其他的是黑白兩色的棋子各一盒。兩隊手PK,手執一色棋,每人一步,輪流放置到棋盤不同的座標上。
現要求大家用程式設計出一套這樣的遊戲,考慮下如何設計比較好。
方案1:有個棋子的類,裡面有所有屬性,顏色,位置座標等。每次放置棋子到棋盤的時候new出一對象。
方案2:分析該棋子的特性,發現:棋子顏色只有兩種(黑白),棋子位置一直在動態變化之中。將顏色定義為固有屬性,將位置座標定義為外部屬性。通過有一個工廠,內部有個集合儲存兩種棋子(黑白),每次放置棋子到棋盤的時候從工廠中拿到對象,然後將動態座標通過關聯方式載入到棋子中。
第一種方案:棋子物件將無休止的新增
第二種方案:棋子物件只存在2個
2、 什麼是享元模式
運用共用技術有效地支援大量細粒度的對象。
3、 模式結構圖
4、模式代碼案例4、1涉及到的類,以及類圖
ChessFlyWeightFactory
ConcreteChessFlyWeight
IChessFlyWeight
Point
PatternRun
4、2具體的代碼實現4、3案例輸出結果
5、模式參與者
F l y w e i g h t:IChessFlyWeight
C o n c r e t e F l y w e i g h:ConcreteChessFlyWeight
U n s h a r e d C o n c r e t e F l y w e i g h t:
F l y w e i g h t F a c t o r y:ChessFlyWeightFactory
OutAttribute:Point
6、模式優缺點
A、可以避免大量相似類的開銷,從而節省記憶體空間
B、統一管理相似類的共性,有利於維護
C、通過區分內部外部狀態來處理特殊性的需求
7、模式適用性
A、一個應用程式使用了大量的對象
B、完全由於使用大量的對象,造成很大的儲存開銷
C、對象的大多數狀態都可變為外部狀態
D、如果刪除對象的外部狀態,那麼可以用相對較少的共用對象取代很多組對象
E、應用程式不依賴於對象標識。由於F l y w e i g h t對象可以被共用,對於概念上明顯有別的對象,標識測試將返回真值
點擊下載“文檔以及源碼下載”
歡迎轉載,請註明出處“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/06/3002649.html”