程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之五:Prototype(3)

無廢話C#設計模式之五:Prototype(3)

編輯:關於C語言

何時采用

l 從代碼角度來說, 如果你希望運行時指定具體類(比如是使用Footman作為敵人還是使用其它),或者你希望避免創建對象時的初始化過程(如果這個過程占用的時間和資源都非常多),或者是希望避免使用工廠方法來實現多態的時候,可以考慮原型模式。

l 從應用角度來說, 如果你創建的對象是多變化、多等級的產品,或者產品的創建過程非常耗時的時候(比如,有一定的計算量,或者對象創建時需要從網絡或數據庫中獲取一定的數據),或者想把產品的創建獨立出去,不想了解產品創建細節的時候可以考慮使用。不得不說,原型模式給了我們多一種創建對象,並且不依賴具體對象的選擇。

實現要點

l .Net中使用Object的MemberwiseClone()方法來實現淺拷貝,通過序列化和反序列化實現深拷貝,後者代價比較大,選擇何時的拷貝方式。

l 原型模式同樣需要抽象類型和具體類型,通過相對穩定的抽象類型來減少或避免客戶端的修改可能性。

l 在代碼中,我們把敵人作為了抽象類型,抽象層次很高。完全可以把步兵作為抽象類型,下面有普通步兵,手榴彈步兵等等,再有一個坦克作為抽象類型,下面還有普通坦克和防導彈坦克。這樣GameScene可能就需要從兩種抽象類型克隆出許多步兵和坦克。不管怎麼樣抽象,只要是對象類型由原型實例所指定,新對象通過原型實例做拷貝,那麼這就是原型模式。

注意事項

l 注意選擇深拷貝和淺拷貝。

l 拷貝原型並進行修改意味著原型需要公開更多的數據,對已有系統實現原型模式可能修改的代價比較大。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved