版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο笤O(shè)計(jì)模式一創(chuàng)建型模式(學(xué)習(xí)筆記)學(xué)習(xí)資料:1、設(shè)計(jì)模式:可服用面向?qū)ο筌浖幕A(chǔ)2、敏捷軟件開發(fā):原則、模式與實(shí)踐3、重構(gòu):改善既有代碼的設(shè)計(jì)4、Refactoring to Patterns5、面向?qū)ο蠓治雠c設(shè)計(jì)場(chǎng)景設(shè)計(jì)一個(gè)人事管理系統(tǒng),其中一個(gè)功能是對(duì)不同類型的員工,計(jì)算當(dāng)月的工資一一不同類型的員工, 擁有不同的薪金計(jì)算制度。結(jié)構(gòu)化設(shè)計(jì)(1)獲得人事系統(tǒng)中所有可能員工類型;(2)根據(jù)不同的員工類型所對(duì)應(yīng)的不同薪金制度,計(jì)算其工資。面向?qū)ο笤O(shè)計(jì)(1)根據(jù)不同的員工類型設(shè)計(jì)不同的類,并使這些類繼承自一個(gè)Employee抽象類,其中有一個(gè)抽象方法GetSalary;(2)在不同的員工類中
2、,根據(jù)自己的薪金制度,重寫GetSalary方法。需求改變場(chǎng)景隨著客戶公司業(yè)務(wù)規(guī)模的拓展,又出現(xiàn)了更多類型的員工結(jié)構(gòu)化設(shè)計(jì)幾乎所有涉及到員工類型的地方都需要做改變面向?qū)ο笤O(shè)計(jì)只需要在新的文件里添加新的員工類,讓其繼承自Employee抽象類,并重寫GetSarary()方法,然后 在EmployeeFactory.GetEmployee方法中根據(jù)相關(guān)條件,產(chǎn)生新的員工類型 面向?qū)ο笤O(shè)計(jì)三大原則:1、針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程;2、優(yōu)先使用對(duì)象組合(has a),而不是類繼承(is a);3、封裝變化點(diǎn);使用重構(gòu)得到模式一一設(shè)計(jì)模式的應(yīng)用不宜先入為主五條更具體的設(shè)計(jì)原則:1、單一職責(zé)原則(
3、SRP)一一個(gè)類應(yīng)該僅有一個(gè)引起它變化的原因2、開放封閉原則(OCP)一類模塊應(yīng)該是可擴(kuò)展的,但是不可修改(對(duì)擴(kuò)展開放,對(duì)更改封閉)3、Liskov 替換原則(LSP)一子類必須能夠替換它們的基類4、依賴倒置原則(DIP)一高層模塊不應(yīng)該依賴于底層模塊,二者都應(yīng)該依賴于抽象抽象不應(yīng)該依賴于實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象5、接口隔離原則(ISP)不應(yīng)該強(qiáng)迫客戶程序依賴于它們不用的方法模式分類:1、從目的看創(chuàng)建型(Creational)模式:負(fù)責(zé)對(duì)象創(chuàng)建結(jié)構(gòu)型(Structural)模式:處理類與對(duì)象間的組合行為性(Behavionral)模式:類與對(duì)象交互中的職責(zé)分配2、從范圍來(lái)看類模式處理類
4、與子類的靜態(tài)關(guān)系 對(duì)象模式處理對(duì)象間的動(dòng)態(tài)關(guān)系Singleton單件(創(chuàng)建型模式)1、存在的問(wèn)題有一些特殊的類,必須保證它們?cè)谙到y(tǒng)中只存在一個(gè)實(shí)例,才能確保它們的邏輯正確性以及良好的效率類設(shè)計(jì)者的責(zé)任,而不是使用者的責(zé)任。2、解決思路封裝變化點(diǎn):哪里變化,封裝哪里一潛臺(tái)詞:如果沒有變化,當(dāng)然不需要額外的封裝3、意圖保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn)。單線程Singleton模式的幾個(gè)要點(diǎn):1、Singleton模式中的實(shí)例構(gòu)造器可以設(shè)置為protected以允許子類派生;2、Singleton模式一般不要支持IClonable接口;3、Singleton模式一般不要支持序列化
5、;4、Singleton模式只考慮了對(duì)象創(chuàng)建的管理,沒有考慮對(duì)象銷毀的管理;5、Singleton模式不能用于多線程環(huán)境。單線程Singleton模式擴(kuò)展:1、將一個(gè)實(shí)例擴(kuò)展到具體的n個(gè)實(shí)例,例如對(duì)象池的實(shí)現(xiàn)(如Type);2、將new構(gòu)造器的調(diào)用轉(zhuǎn)移到其他類中,例如多個(gè)類協(xié)同工作環(huán)境中,某個(gè)局部環(huán)境只需要擁有某個(gè)類的實(shí)例(如 HttpContext);3、理解和擴(kuò)展Singleton模式的核心是“如何控制用戶使用new對(duì)一個(gè)類的實(shí)例構(gòu)造器的任意調(diào)用”。Abstract Factory抽象工廠(創(chuàng)建型模式)new的問(wèn)題1、常規(guī)的對(duì)象創(chuàng)建方法:Road road = new Road();2、存
6、在的問(wèn)題一實(shí)現(xiàn)依賴,不能應(yīng)對(duì)“具體實(shí)例化類型”的變化3、解決思路封裝變化點(diǎn):哪里變化,封裝哪里一潛臺(tái)詞:如果沒有變化,當(dāng)然不需要額外的封裝工廠模式的緣起1、變化點(diǎn)在“對(duì)象創(chuàng)建”,因此就封裝“對(duì)象創(chuàng)建”2、面向接口編程一依賴接口而非依賴實(shí)現(xiàn)3、簡(jiǎn)單工廠示例:?jiǎn)我粚?duì)象class RoadFactory/類庫(kù)public static Road CreateRoad()return new Road ();Road road = RoadFactory.CreateRoad(); 在其他地方實(shí)現(xiàn)客戶程序多個(gè)相互依賴的對(duì)象class RoadFactory/類庫(kù),無(wú)法實(shí)現(xiàn)不同風(fēng)格(變化點(diǎn))public
7、 static Road CreateRoad()return new Road ();public static Building CreateBuilding()return new Building();public static Tunnel CreateTunnel()return new Tunnel ();public static Jungle CreateJungle()return new Jungle ();/創(chuàng)建其他對(duì)象以下代碼在其他地方實(shí)現(xiàn)客戶程序(相對(duì)穩(wěn)定)Road road = RoadFactory. CreateRoad();Building building
8、 = RoadFactory. CreateBuilding();對(duì)象交互的代碼抽象工廠1、存在的問(wèn)題不能應(yīng)對(duì)“不同系列對(duì)象”的變化(比如不同風(fēng)格的對(duì)象)2、解決思路使用面向?qū)ο蟮募夹g(shù)來(lái)“封裝”變化點(diǎn)繞過(guò)常規(guī)的對(duì)象創(chuàng)建方法,避免客戶程序和“多系列具體對(duì)象創(chuàng)建”的緊耦合提供一個(gè)接口,讓該接口負(fù)責(zé)“多系列具體對(duì)象創(chuàng)建”而不用指定具體的類3、意圖實(shí)現(xiàn)“多種相互依賴的對(duì)象”的創(chuàng)建工作實(shí)現(xiàn)“多系列對(duì)象”的創(chuàng)建工作4、應(yīng)用要點(diǎn)(1)如果沒有“多系列對(duì)象的構(gòu)建”的需求變化,則沒有必要使用Abstract Factory模式;(2)“系列對(duì)象”指的是這些對(duì)象之間有相互依賴、或作用的關(guān)系;(3)Abstract
9、 Factory模式主要在于應(yīng)對(duì)“新系列”的需求變化,而難以應(yīng)對(duì)“新對(duì)象”的需求變化;(4)Abstract Factory模式經(jīng)常和Factory Method模式共同組合來(lái)應(yīng)對(duì)“新對(duì)象”的需求變化。Builder生成器(創(chuàng)建型模式)Builder模式的緣起1、假設(shè)創(chuàng)建游戲中的一個(gè)房屋設(shè)施(House),該房屋的構(gòu)建由幾個(gè)部分構(gòu)成,且各個(gè)部分要富于變化;2、如果使用最直觀的設(shè)計(jì)方法,每一個(gè)房屋部分的變化,都將導(dǎo)致房屋構(gòu)建的重新修正。動(dòng)機(jī)1、在面臨一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作時(shí),通常由各部分的子對(duì)象用一定的算法構(gòu)成,由于需求的變化,這個(gè) 復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的
10、算法相對(duì)穩(wěn)定;2、提供一種“封裝機(jī)制”來(lái)隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需 求改變而改變;意圖將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示3、應(yīng)用要點(diǎn)(1)Builder模式主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”其中“分步驟”是一個(gè)穩(wěn)定的算法,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化(2)變化點(diǎn)在哪里,封裝哪里Builder模式用于應(yīng)對(duì)“復(fù)雜對(duì)象各個(gè)部分”的需求變動(dòng),而難以應(yīng)對(duì)“分步驟構(gòu)建算法”的需求變動(dòng)(3)Abstract Factory模式解決“系列對(duì)象”的需求變化,Builder模式解決“對(duì)象部分”的需求變化Builder模式通常和Co
11、mposite模式組合使用從耦合關(guān)系談起:耦合關(guān)系直接決定著軟件面對(duì)變化時(shí)的行為一模塊與模塊之間的緊耦合使得軟件面對(duì)變化時(shí),相關(guān)的模塊都要隨之更改一模塊與模塊之間的松耦合使得軟件面對(duì)變化時(shí),一些模塊更容易被替換或者更改,但其他模塊保持不變 動(dòng)機(jī)一在軟件系統(tǒng)中,經(jīng)常面臨著“某個(gè)對(duì)象”的創(chuàng)建工作,由于需求的變化使得該對(duì)象的具體實(shí)現(xiàn)經(jīng)常面臨 著劇烈的變化,但是它卻擁有比較穩(wěn)定的接口一提供一種“封裝機(jī)制”來(lái)隔離出“易變對(duì)象”的變化,從而保持系統(tǒng)中“其他依賴該對(duì)象的對(duì)象”不隨 著需求改變而改變意圖一定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,從而使得一個(gè)類的實(shí)例化延遲到子類應(yīng)用要點(diǎn)(1)Fac
12、tory Method模式主要用于隔離類對(duì)象的使用者和具體類型之間的耦合關(guān)系。一面對(duì)一個(gè)經(jīng)常變化的具體類型,緊耦合關(guān)系會(huì)導(dǎo)致軟件的脆弱(2)Factory Method模式通過(guò)面向?qū)ο蟮氖址▽⑺獎(jiǎng)?chuàng)建的具體對(duì)象延遲到子類,從而實(shí)現(xiàn)一種擴(kuò)展的策 略,較好地解決了這種緊耦合關(guān)系。(3)Factory Method模式解決“單個(gè)對(duì)象”的需求變化;Abstract Factor模式解決“系列對(duì)象”的需求變化; Builder模式解決“對(duì)象部分”的需求變化。依賴關(guān)系的倒置一抽象不應(yīng)該依賴于實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)依賴于抽象動(dòng)機(jī)一在軟件系統(tǒng)中,經(jīng)常面臨著“某些結(jié)構(gòu)復(fù)雜的對(duì)象”的創(chuàng)建工作,由于需求的變化使得該對(duì)象
13、的具體實(shí)現(xiàn)經(jīng)常面臨著劇烈的變化,但是它卻擁有比較穩(wěn)定一致的接口一提供一種“封裝機(jī)制”向客戶程序隔離出“易變對(duì)象”,從而保持系統(tǒng)中“其他依賴這些易變對(duì)象的對(duì)象的客戶程序”不隨著需求改變而改變意圖一使用原型實(shí)例指定創(chuàng)建對(duì)象的種類,然后通過(guò)拷貝這些原型來(lái)創(chuàng)建新的對(duì)象應(yīng)用要點(diǎn)(1)Prototype原型模式同樣用于隔離類對(duì)象的使用者和具體類型(易變類)之間的耦合關(guān)系,它同樣要求 這些“易變類”擁有“穩(wěn)定的接口”。(2)Prototype原型模式采用“原型克隆”的方式創(chuàng)建易變類的實(shí)體對(duì)象,從而實(shí)現(xiàn)靈活地動(dòng)態(tài)創(chuàng)建“擁有 某些穩(wěn)定接口”的新對(duì)象。(3)Prototype原型模式中的Clone方法可以利用.NET中的Object類的MemberwiseClone()方法或者序列化方法來(lái)實(shí)現(xiàn)深拷貝。有關(guān)創(chuàng)建型模式的討論1、Singleton模式解決的是實(shí)體對(duì)象個(gè)數(shù)的問(wèn)題,其他創(chuàng)建型模式解決的都是new所帶
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆寧夏吳忠市高三上學(xué)期適應(yīng)性考試(一模)歷史試題(解析版)
- 《社區(qū)自治》課件
- 單位管理制度集合大全職員管理篇
- 單位管理制度匯編大全【人力資源管理】
- 單位管理制度合并選集人事管理
- 單位管理制度分享合集【人事管理】十篇
- 單位管理制度范例匯編【人力資源管理篇】十篇
- 單位管理制度呈現(xiàn)大全【人力資源管理篇】十篇
- 七年級(jí)英語(yǔ)Whatwouldyouliketohave課件
- 《珠海酒店信息》課件
- 自然資源價(jià)格評(píng)估通則 TD/T 1061-2021
- 社區(qū)居家養(yǎng)老食堂方案策劃書(2篇)
- 2024年肺結(jié)節(jié)病的診斷與鑒別診斷講座課件
- 2023-2024學(xué)年浙江省寧波市余姚市九年級(jí)(上)期末英語(yǔ)試卷
- 《金融風(fēng)險(xiǎn)管理》期末復(fù)習(xí)試題及答案
- DZ/T 0462.4-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第4部分:銅等12種有色金屬礦產(chǎn)(正式版)
- 熱帶園林樹木學(xué)智慧樹知到期末考試答案章節(jié)答案2024年海南大學(xué)
- 《無(wú)機(jī)及分析化學(xué)》期末考試試卷附答案
- 2024年藥品集中采購(gòu)合同范本(二篇)
- 微生物學(xué)(魯東大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年魯東大學(xué)
- 玻璃制造過(guò)程綠色節(jié)能技術(shù)創(chuàng)新
評(píng)論
0/150
提交評(píng)論