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

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

編輯:關於C語言
碼執行結果如下圖:

代碼說明

l Enemy類是抽象原型,它有兩個用途,一是定義了原型的一些抽象內容,二是定義了原型模式必須的拷貝方法。在這裡,我們看到,每個敵人的屬性有位置、攻擊力、速度等,並且能通過ShowInfo()方法來獲取這個人的信息。

l FootMan類就是具體原型了,它顯示了敵人的具體參數以及實現了克隆自身。

l GameScene類就是調用方,在這裡我們並沒有看到有和具體原因進行依賴,通過復制傳入的克隆原型,得到一些新的敵人,在原型的基礎上稍微調整一下就變成了一支敵人部隊。

l 原型模式通過對原型進行克隆來替代無數子類,因此也就減少了調用方和具體類型產生依賴的程序。

l Clone()方法接受一個參數,表示是否是深拷貝。在這裡,我們通過序列化反序列化實現深拷貝,深拷貝實現對象的完整復制,包括對象內部的引用類型都會復制一份全新的。在這裡,如果3個敵人對象的Location都指向內存同一個地址的話,那麼它們就分不開了,因此,在復制的時候需要進行深拷貝,使得它們的Location是獨立的。

l 在初始化Enemy的時候,我們Sleep()了一下,目的是模擬對象的創建是一個非常耗時的工作,這也體現了原型模式的另一個優勢,在生成敵人的時候,我們其實無需再做這些工作了,我們只需要得到它的完整數據,並且進行一些修改就是一個新的敵人。

l 運行程序後可以看到,雖然創建了三個敵人,但是只耗費了一個敵人的創建時間,三個敵人都是從原型克隆出來的。由於進行了深拷貝,修改了一個敵人的位置並不會影響其它敵人。

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