成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談原型與抽象工廠

開發 開發工具
設計模式的書都很喜歡拿Prototype(原型)與Abstract Factory(抽象工廠)兩個模式作比較,本文也為大家談談原型與抽象工廠。

從相似的角度來說,它們兩個都通過Composite的方式,把實例化的過程從具體使用這些對象的類中分離出去,只讓用戶知道調用Manager或Factory的哪些方法來實例化而不用記住具體的類名。抽象工廠和原型模式是基于相同原理的模式,唯一的不同之處就是實例化的過程,抽象工廠是基于new來實例化對象的(缺點是HardCode,編譯時已經決定了要實例化的具體是什么對象),而原型是基于Clone來創建對象的(優點是在程序運行時,能夠像策略模式一樣實時更換對象,創建出基于相同接口的不同對象。)我更傾向的觀點把原型模式歸為抽象工廠的一種具體實現形式,強調實例的創建時是基于另一個實例的Clone方法。

上面說了原型模式這么多好處。下面將按照《HeadFirst設計模式》的例子的改版來做一下解說。

場景:

你接了某個游戲公司的項目,項目為設計一個角色扮演游戲。在游戲中,當英雄在動態創建的場景中闖蕩的時候,免不了要與各色各樣的怪物來戰斗。不僅有游戲公司預先定制好的怪物,而且還能夠讓高級玩家手動創造新的怪物(預先定義好的怪物的特征幾乎都不一樣,行為比用戶自定義的怪物要多,用戶自定義的怪物只具備些簡單行為,跟尾隨在身后的吉祥物差不多。對于自定義的怪物,玩家能夠選擇怪物的類型,例如是Dragon還是Bird,并且為其選擇顏色等)。Monster的設計如下:

凡是Monster都要實現IMonster的接口。DuckMonster和CakeMonster為游戲公司預設的怪物類,場景中每出現一只頭種怪物,都需要用到new DuckMonster或new CakeMonster。通過下面的兩個工廠之一來解耦其實例化的代碼。

而blueEyesWhiteDragon和bedEyesBlackBird為用戶定義的一種怪物(請注意!他們不是類,而是實例),場景中每出現一頭這種怪物,都需要調一次blueEyesWhiteDragon.Clone()或bedEyesBlackBird.Clone()。

先說一下MonsterFactory1與MonsterFactory2。

MonsterFactory1的缺點:MonsterFactory1每當增加一種新怪物的時候,就要增加一個GetXXMonter方法,等于不斷地對外開放接口,而且方法多起來難以管理。

或者說為DuckMonster和CakeMonster各自建一個Factory,好處是只需要一個Get方法。缺點自然是Factory太多,無法管理。
MonsterFactory2的缺點自然是每增加一種新怪物,就多一個if來根據type參數來取得實例,不符合面向對象思想的“對擴展開放,對修改關閉”的原則。

到了MonsterPrototypeManager,通過依賴注入(對于依賴注入不理解的可以看看我的另外兩篇文章:理解Spring中的依賴注入以及利用Spring解耦VS的WebService),我們可以不用寫任何初始化的代碼,來完成實例的創建,并且注入到regMonsterList這個Dictionary類的實例中。想獲得實例,只要把type傳進去GetSpecificMonster,就能從regMonsterList中取得相應的實例,并返回Clone后的實例。

在游戲過程中,高級玩家創建了一種新的怪物。由于這種怪物是一個實例,而不是一個類,所以還可以動態添加到regMonsterList當中,需要的時候可以拿出來Clone一下,來創建新實例。而MonsterFactory們就只能在編譯時期確定好具體定義好的怪物“類”,靈活性比Prototype模式的MonsterPrototypeManager要差。

【編輯推薦】

  1. JavaScript設計模式之抽象工廠及工廠方法模式
  2. C#設計模式之抽象工廠(abstract factory)模式示例源代碼
  3. C#抽象工廠模式的幾種實現方法及比較
  4. SketchFlow:第一款真正意義上的原型設計工具
  5. Expression Blend 3新工具:用SketchFlow來設計原型
責任編輯:彭凡 來源: cnblogs
相關推薦

2024-03-06 13:19:19

工廠模式Python函數

2021-09-29 13:53:17

抽象工廠模式

2020-09-14 17:26:48

抽象工廠模式

2020-10-19 09:28:00

抽象工廠模式

2021-03-06 22:50:58

設計模式抽象

2009-01-15 10:55:29

JavaScript設計模式抽象工廠

2021-07-06 08:59:18

抽象工廠模式

2011-06-28 10:55:20

C#接口抽象類

2011-07-21 14:33:02

設計模式

2011-07-28 09:50:58

設計模式

2023-08-07 08:04:05

動態抽象工廠模式

2022-05-26 09:20:01

JavaScript原型原型鏈

2020-12-17 09:38:16

設計模式參數

2009-04-29 09:05:59

Lambda抽象代表.NET

2009-08-10 10:04:25

C#抽象類C#接口

2012-12-21 09:48:06

JavaJavaSE異常

2012-12-21 10:15:35

2017-05-05 10:31:35

JavaScriptprototype__proto__

2010-08-01 16:06:11

Android開發

2012-02-14 09:43:08

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久久网 | 日韩av一区二区在线观看 | 日韩精品二区 | 天天操天天操 | 欧美成人一区二区三区 | 偷拍自拍网 | 黄色永久免费 | 蜜桃传媒av | 国产在线网站 | 综合色播 | 久草视频观看 | 国产精品久久久久久久久久久久冷 | 亚洲中午字幕 | 久久精品中文字幕 | 国产乱码精品一品二品 | 久久久精品日本 | 国内精品久久久久久影视8 最新黄色在线观看 | 波多野结衣电影一区 | 欧美日韩一区精品 | 亚洲成人av | 精品欧美一区二区三区久久久 | 一区二区三区在线观看视频 | 日韩另类视频 | 久久久久精 | 成人精品在线视频 | 男女性毛片 | 国产精品美女一区二区三区 | 亚洲视频免费在线观看 | 在线国产一区二区 | 国内精品免费久久久久软件老师 | 亚洲第一在线 | 韩日在线| 欧美自拍视频 | 国产一区二区三区 | 日韩一区二区三区视频 | 丝袜天堂 | 天天玩天天操天天干 | 国产在线a | 色网站入口 | 久久精品亚洲精品国产欧美kt∨ | 在线免费观看日本视频 |