版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計(jì)模式之 原型模式,Prototype,目錄Content,原型模式定義,原型模式就是通過一個原型對象來表明要創(chuàng)建的對象類型,然后用復(fù)制這個原型對象的方法來創(chuàng)建更多同類型的對象。 原型模式允許一個對象再創(chuàng)建另外一個可定制的對象,根本無需知道任何如何創(chuàng)建的細(xì)節(jié)。,為什么需要原型模式?,在畫圖工具里,要畫圓只需要拖動工具條的畫圓工具到繪圖區(qū)即可,而不需要從頭開始一點(diǎn)一點(diǎn)地畫一個圓,而且如果需要不同的大小和顏色的圓,只需要復(fù)制幾個圓,然后再修改他們的大小和顏色即可。這就給使用者帶來了很大的方便,即使用者不需要知道對象是如何創(chuàng)建的,只需要復(fù)制一個已有的對象,然后在其上面進(jìn)行修改以得到自己想要的對象,
2、這就是原型模式的具體應(yīng)用。,為什么需要原型模式?,引入原型模式的本質(zhì)在于利用已有的一個原型對象,快速的生成和原型對象一樣的實(shí)例。你有一個A的實(shí)例a: A a = new A();現(xiàn)在你想生成和A一樣的一個實(shí)例b,按照原型模式,應(yīng)該是這樣:A b = a. Clone();而不是重新再new一個A對象。通過上面這句話就可以得到一個和a一樣的實(shí)例,確切的說,應(yīng)該是它們的數(shù)據(jù)成員是一樣的。原型模式模式是返回了一個A對象而沒有使用new操作。,原型模式與工廠模式的異同,原型模式應(yīng)用于希望系統(tǒng)獨(dú)立于產(chǎn)品的創(chuàng)建、表示和構(gòu)成時,這和工廠模式很類似。事實(shí)上,和工廠模式相同的是,原型模式同樣對客戶隱藏了對象的創(chuàng)
3、建工作,但是,與工廠模式通過對一個類進(jìn)行實(shí)例化來構(gòu)造新對象不同的是,原型模式是通過拷貝一個現(xiàn)有對象生成新對象的。工廠模式適用于產(chǎn)品種類有限的情況下,當(dāng)產(chǎn)品數(shù)量巨大或需要提供動態(tài)產(chǎn)品增刪等性能時,使用原型模式具有更強(qiáng)的適應(yīng)性。,原型模式的一般結(jié)構(gòu),原型模式的一般結(jié)構(gòu)如下:,原型模式的一般結(jié)構(gòu),客戶角色:客戶調(diào)用端,客戶使用原型對象復(fù)制出需要的對象。 抽象原型角色:定義一個原型的抽象定義,其中包含一個復(fù)制自身的接口。 具體原型角色:作為原型被復(fù)制的具體對象,需實(shí)現(xiàn)抽象原型所定義的接口。,原型管理器角色:該角色用于創(chuàng)建具體的原型類對象,并且記錄每一個被創(chuàng)建的對象并且把已經(jīng)創(chuàng)建過的對象保存下來。換句話
4、說就是先創(chuàng)建對象并將其保存下來(由管理器完成)然后利用Clone()方法來創(chuàng)建新對象,原型模式示例,背景: 前幾天,我很不幸把屋門的鑰匙給弄丟了,結(jié)果進(jìn)不了家門。萬幸的是,舍友那兒還有一把,于是第二天我拿了她的那把去配鑰匙。另外,她還讓我順便給她配一把櫥柜的鑰匙?,F(xiàn)在配個鑰匙真是簡單,把鑰匙給他,他直接找一個合適的鑰匙胚子,把我的鑰匙夾在配鑰匙機(jī)的一端,胚子夾在另一端,一開電源,一把標(biāo)尺比著我的鑰匙齒型走一遍,砂輪就在胚子上復(fù)制出一把鑰匙來!一分鐘不到,兩把新鑰匙就搞定了!,使用UML序列圖直觀解釋,使用類圖描述,程序代碼如下:,namespace 原型模式 . /抽象鑰匙原型 public
5、abstract class Key . private string name; public string Name . get . return name; set . name = value; private string owner; public string Owner . get . return owner; set . owner = value; public Key(string name, string owner) . = name; this.owner = owner; /鑰匙復(fù)制自身的抽象定義 public abstract Key Cl
6、one(); ,/大門鑰匙 public class GateKey : Key .public GateKey(string owner) : base(Gate Key, owner) . public override Key Clone() . return new GateKey(this.Owner); /櫥柜鑰匙 public class CabinetKey : Key .public CabinetKey(string owner) : base(Cabinet Key, owner) . public override Key Clone() . return new Ca
7、binetKey(this.Owner); ,/客戶調(diào)用方法 public class Client . public static void Main(string args) . Key oldGateKey, newGateKey, oldCabinetKey, newCabinetKey; oldGateKey = new GateKey(“Him); newGateKey = oldGateKey.Clone(); newGateKey.Owner = Me; oldCabinetKey = new CabinetKey(Me); newCabinetKey = oldCabinet
8、Key.Clone(); newCabinetKey.Owner = “Him; Console.WriteLine(oldGateKey); Console.WriteLine(newGateKey); Console.WriteLine(oldCabinetKey); Console.WriteLine(newCabinetKey); ,原型管理器的應(yīng)用,public class KeyManager . private System.Collections.Hashtable keys = new System.Collections.Hashtable(); public Key th
9、isstring name . set . keys.Add(name, value); get . return (Key)keysname; ,/客戶調(diào)用方法 public class Client . public static void Main(string args) . KeyManager keyManager = new KeyManager(); keyManagergate = new GateKey( Him ); keyManagerkey2 = new GeneralKey(key2, Him ); keyManagerkey3 = new GeneralKey(k
10、ey3, Him ); keyManagerkey4 = new GeneralKey(key4, “Him); keyManagerkey5 = new GeneralKey(key5, Him ); Key newKey = (Key)keyManagerkey2.Clone(); newKey.Name = Office; newKey.Owner = Me; ,原型模式的優(yōu)點(diǎn),1、運(yùn)行時刻增加和刪除產(chǎn)品。 2、改變值以指定新對象。 3、改變結(jié)構(gòu)以指定新對象。 4、減少子類的構(gòu)造。 5、用類動態(tài)配置應(yīng)用。,原型模式的缺點(diǎn),Prototype模式最主要缺點(diǎn)就是每個類必須配備一個克隆方法,而且這個克隆方法需要對類的功能進(jìn)行通盤考慮,這對全新的類來說不是很難,但對已有的類進(jìn)行改造時不一定是件容易的事。,原型模式實(shí)現(xiàn)要點(diǎn),使用一個原型管理器。當(dāng)一個系統(tǒng)中原型數(shù)目不固定時,要保持一個可用原型的注冊表??蛻舨粫约簛砉芾碓停珪谧员碇写鎯蜋z索原型。客戶在克隆一個原型前會向注冊表請求該原型。我們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026青海玉樹市人民醫(yī)院面向社會招聘編外聘用工作人員的招聘2人參考題庫及答案1套
- 醫(yī)院醫(yī)患關(guān)系文化墻設(shè)計(jì)方案
- 案管工作培訓(xùn)課件
- 案場服務(wù)禮儀標(biāo)準(zhǔn)培訓(xùn)
- 醫(yī)用超聲波在呼吸系統(tǒng)疾病治療中的應(yīng)用
- 2026年新能源汽車核心零部件項(xiàng)目公司成立分析報(bào)告
- 2026年跨境支付合規(guī)SaaS項(xiàng)目商業(yè)計(jì)劃書
- 智能康復(fù)輔助設(shè)備的研究與應(yīng)用
- 主任解讀神經(jīng)內(nèi)科疾病診斷標(biāo)準(zhǔn)
- 標(biāo)本采集相關(guān)知識課件
- 2025年天津科技大學(xué)毛澤東思想和中國特色社會主義理論體系概論期末考試模擬題及答案1套
- 南方航空安全員培訓(xùn)
- 2025-2026學(xué)年嶺南美版(新教材)初中美術(shù)七年級上冊期末綜合測試卷及答案
- 建設(shè)工程施工內(nèi)部承包協(xié)議
- 【角色游戲?qū)τ變荷鐣园l(fā)展影響及促進(jìn)對策7900字(論文)】
- 宮內(nèi)節(jié)育器放置術(shù)
- 新制定《無障礙環(huán)境建設(shè)法》主題PPT
- 期末復(fù)習(xí)主題班會
- 道路交通基礎(chǔ)設(shè)施韌性提升
- 鋼結(jié)構(gòu)噴砂防腐施工方案
- 涪江上游水資源水環(huán)境調(diào)查評價
評論
0/150
提交評論