基於設計模式的學習之旅—–享元模式(附源碼)

來源:互聯網
上載者:User
        基於設計模式的學習之旅-----享元模式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”

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.