




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
設(shè)計模式速查手冊-創(chuàng)建型2010-12-28 22:46 by EricZhang(T2噬菌體), 1962 visits, 網(wǎng)摘, 收藏, 編輯 Is & Is Not這篇文章是僅包含模式的名稱、簡要說明、結(jié)構(gòu)類圖和結(jié)構(gòu)示例代碼??捎糜诳焖贋g覽、回顧、查詢及復(fù)習(xí)設(shè)計模式。模式的意圖和使用場合來自作者的個人實踐總結(jié)。雖然示例代碼使用C#,但是盡量不會用到C#中特有的特性、接口及方法,而是起到一個通用框架說明的作用。這篇文章不是對設(shè)計模式面面俱到。對設(shè)計模式詳細而深入的探討和研究。從其它文獻中照搬的東西。保證絕對沒有錯誤(雖然我盡我所能讓其準(zhǔn)確)。講述設(shè)計模式在C#中具體實現(xiàn)方法。01 Abstract Factory(抽象工廠)簡要說明抽象工廠模式擁有一組工廠類,這些工廠類實現(xiàn)同一個抽象工廠接口,這個接口定義了一系列創(chuàng)建方法,每一個方法創(chuàng)建一種產(chǎn)品,所有方法所創(chuàng)建的產(chǎn)品組成一個系列。不同的具體工廠類創(chuàng)建不同系列的系列產(chǎn)品,系列中每一種產(chǎn)品實現(xiàn)同一個接口。客戶類依賴抽象工廠接口及各個產(chǎn)品接口,并通過實例化不同的具體工廠創(chuàng)建不同的產(chǎn)品系列。抽象工廠適用于客戶類擁有與產(chǎn)品系列無關(guān)的加工邏輯的場合,此時通過抽象工廠模式,將創(chuàng)建產(chǎn)品系列的邏輯與加工邏輯分離,那么同樣的加工邏輯就可以作用于不同的產(chǎn)品系列,至于創(chuàng)建哪個系列的產(chǎn)品則由客戶類擁有的具體的工廠決定。結(jié)構(gòu)類圖結(jié)構(gòu)示例代碼view source print?/* * * Design Pattren Quick Start * 01 Abstract Factory - 抽象工廠 * */namespace DesignPatternQuickStart.AbstractFactory / / 產(chǎn)品A的接口 / interface IProductA / / 品種為1的產(chǎn)品A / class ProductA1 : IProductA / / 品種為2的產(chǎn)品A / class ProductA2 : IProductA / / 產(chǎn)品B的接口 / interface IProductB / / 品種為1的產(chǎn)品B / class ProductB1 : IProductB / / 品種為2的產(chǎn)品B / class ProductB2 : IProductB / / 抽象工廠接口 / interface IAbstractFactory IProductA CreateProductA(); IProductB CreateProductB(); / / 生產(chǎn)1系列的具體工廠,用于生產(chǎn)品種為1為產(chǎn)品A和B / class Factory1 : IAbstractFactory public IProductA CreateProductA() return new ProductA1(); public IProductB CreateProductB() return new ProductB1(); / / 生產(chǎn)2系列的具體工廠,用于生產(chǎn)品種為2為產(chǎn)品A和B / class Factory2 : IAbstractFactory public IProductA CreateProductA() return new ProductA2(); public IProductB CreateProductB() return new ProductB2(); / / 客戶類 / class Client public void OpreateMethod() IAbstractFactory factory1 = new Factory1(); IProductA productA1 = factory1.CreateProductA(); IProductB productB1 = factory1.CreateProductB(); IAbstractFactory factory2 = new Factory2(); IProductA productA2 = factory2.CreateProductA(); IProductB productB2 = factory2.CreateProductB(); 02 Builder(生成器)簡要說明生成器模式首先定義一個生成器接口,接口中定義了生成一個產(chǎn)品(或邏輯上可看做整體的產(chǎn)品)各個部分的方法及返回這個產(chǎn)品的方法。不同的生成器可以封裝不同的生成算法??蛻纛愒跇?gòu)造函數(shù)中通過生成器生成需要的這個產(chǎn)品。生成器適用于待構(gòu)建對象十分復(fù)雜,并根據(jù)具體情況存在不同構(gòu)建算法的場合,使用生成器模式后復(fù)雜對象的構(gòu)建過程與使用過程分離。結(jié)構(gòu)類圖結(jié)構(gòu)示例代碼view source print?/* * * Design Pattren Quick Start * 02 Builder - 生成器 * */namespace DesignPatternQuickStart.Builder / / 含有不同模塊的產(chǎn)品 / class Product public int PartA get; set; public object PartB get; set; public string PartC get; set; / / 生成器接口 / interface IBuilder void BuildPartA(int partA); void BuildPartB(object partB); void BuildPartC(string partC); Product GetResult(); / / 具體的生成器 / class Builder : IBuilder protected Product _product; public Builder() this._product = new Product(); /此處可以使用任意復(fù)雜的構(gòu)造算法構(gòu)造不同模塊 public void BuildPartA(int partA) this._product.PartA = partA; public void BuildPartB(object partB) this._product.PartB = partB; public void BuildPartC(string partC) this._product.PartC = partC; public Product GetResult() return this._product; / / 生成器的客戶類 / class Client protected Product _product; public Client() IBuilder buider = new Builder(); buider.BuildPartA(100); buider.BuildPartB(null); buider.BuildPartC(abc); this._product = buider.GetResult(); 03 工廠方法(Factory Method)簡要說明工廠方法通過一個抽象類實現(xiàn)了所有對產(chǎn)品的加工操作代碼,唯獨將產(chǎn)品的構(gòu)建方法寫成抽象方法。繼承這個抽象類的具體類只重寫其構(gòu)建方法,這樣就實現(xiàn)了對于不同被構(gòu)建產(chǎn)品復(fù)用相同的加工操作邏輯。工廠方法適用于需要在子類中才能決定實例化哪個被操作對象,同時這些被操作對象又復(fù)用相同操作邏輯的場合。結(jié)構(gòu)類圖結(jié)構(gòu)示例代碼view source print?/* * * Design Pattren Quick Start * 03 FactoryMethod - 工廠方法 * */namespace DesignPatternQuickStart.FactoryMethod / / 產(chǎn)品接口 / interface IProduct / / A類型產(chǎn)品 / class ProductA : IProduct / / B類型產(chǎn)品 / class ProductB : IProduct / / 含有工廠方法的抽象業(yè)務(wù)類 / abstract class ACreator protected abstract IProduct FactoryMethod(); public void OpreateMethod() IProduct product = FactoryMethod(); /對product的一系列操作 / / 生產(chǎn)A類型產(chǎn)品的具體業(yè)務(wù)類 / class CreatorA : ACreator protected override IProduct FactoryMethod() return new ProductA(); / / 生產(chǎn)B類型產(chǎn)品的具體業(yè)務(wù)類 / class CreatorB : ACreator protected override IProduct FactoryMethod() return new ProductB(); / / 客戶類 / class Client public void OpreateMethod() ACreator creatorA = new CreatorA(); creatorA.OpreateMethod(); ACreator creatorB = new CreatorB(); creatorB.OpreateMethod(); 04 Prototype(原型)簡要說明原型模式定義一個原型接口,其中有克隆自身的方法及此接口所有實現(xiàn)及后代都應(yīng)該具有的方法的定義。其實現(xiàn)及實現(xiàn)的后代均重寫克隆方法,使得克隆方法返回自身的一個克隆,克隆對象具有母對象的所有特性??蛻纛愂褂貌煌瑢ο蟮目寺崿F(xiàn)對象的創(chuàng)建。原型模式適用于需要創(chuàng)建許多來自同一抽象的不同后代對象,同時希望通過已有對象克隆來創(chuàng)建新對象的場合。結(jié)構(gòu)類圖結(jié)構(gòu)示例代碼view source print?/* * * Design Pattren Quick Start * 04 Prototype - 原型 * */namespace DesignPatternQuickStart.Prototype / / 原型接口 / interface IPrototype IPrototype Clone(); / / 具體原型類A / class PrototypeA : IPrototype public string Member1 get; set; public IPrototype Clone() PrototypeA cloneObject = new PrototypeA(); cloneObject.Member1 = Member1; return cloneObject; / / 具體原型類AA / class PrototypeAA : PrototypeA public string Member2 get; set; public new IPrototype Clone() PrototypeAA cloneObject = new PrototypeAA(); cloneObject.Member1 = Member1; cloneObject.Member2 = Member2; return cloneObject; / / 客戶類 / class Client public void OpreateMethod() IPrototype prototypeA1 = new PrototypeA(); IPrototype prototypeA2 = prototypeA1.Clone(); IPrototype prototypeAA1 = new PrototypeAA(); IPrototype prototypeAA2 = prototypeAA1.Clone(); 05 Singleton(單件)簡要說明單件模式試圖保證單件類在全局只存在一個實例。常用的方法是將構(gòu)造函數(shù)設(shè)為私有,然后提供一個公用靜態(tài)方法用于獲取單例類的實例,這個公用靜態(tài)方法保證每次都返回同一個實例。單例模式適用于需要保證某個類在全局只存在一個實例的場合。結(jié)構(gòu)類圖結(jié)構(gòu)示例代碼view source print?/* * * Design Pattren Quick Start * 05 Singleton - 單件 * */namespace DesignPatternQuic
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024撫順礦務(wù)局職工工學(xué)院輔導(dǎo)員招聘筆試真題
- 2025年微機勵磁屏項目合作計劃書
- 體育賽事數(shù)據(jù)分析師筆試試題及答案
- 2025年高純四氧化三錳項目建議書
- 2025年核電站用電纜項目建議書
- 2024年涼山州會理市定向考聘社區(qū)工作者真題
- 消費贈與合同
- 小學(xué)科學(xué)教科版五年級上冊全冊易錯知識點專項練習(xí)(判斷選擇分單元編排附參考答案和點撥)
- 頂崗實習(xí)報告范文3000字
- 享稅收優(yōu)惠-8個備案管理稅務(wù)風(fēng)險需防范
- 國家教育十五五規(guī)劃綱要全文內(nèi)容
- 以工代賑宣傳活動方案
- 飛機的平衡、穩(wěn)定性與操縱性
- 《習(xí)作:神奇的探險之旅》教案
- GB/T 27772-2025病媒生物密度控制水平蠅類
- 2025年中國竹節(jié)參市場發(fā)展規(guī)劃及投資戰(zhàn)略可行性預(yù)測報告
- 電梯日管控、周排查、月調(diào)度制度及管控清單(附記錄表格)2
- 2025河南大河控股有限公司招聘3人筆試參考題庫附帶答案詳解
- 第三屆全國技能大賽競賽(裝配鉗工)選拔賽備考試題(附答案)
- 水閣污水處理廠二期工程-污泥系統(tǒng)設(shè)備采購項目招標(biāo)文件
- 《民法學(xué)課件》課件-第五編-第十六章 所有權(quán)通論
評論
0/150
提交評論