資源描述:
《面向?qū)ο蟮脑O(shè)計(jì)原則與設(shè)計(jì)模式.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、【面向?qū)ο蟮脑O(shè)計(jì)原則與設(shè)計(jì)模式】【SOA實(shí)驗(yàn)室】目錄1.面向?qū)ο蟮脑O(shè)計(jì)原則2.設(shè)計(jì)模式概述3.設(shè)計(jì)模式詳解4.設(shè)計(jì)即生活5.設(shè)計(jì)模式討論面向?qū)ο蟮脑O(shè)計(jì)原則面向?qū)ο蟮乃膫€(gè)基本概念抽象封裝(保持和促進(jìn)系統(tǒng)的可維護(hù)性)繼承(使得概念和定義可以復(fù)用)多態(tài)(使得實(shí)現(xiàn)和應(yīng)用可以復(fù)用)設(shè)計(jì)目標(biāo)可擴(kuò)展性(可擴(kuò)展Extensibility)靈活性(可修改Flexibility)可插入性(可替換Pluggability)面向?qū)ο蟮幕c(diǎn)是世界是由各種各樣的對(duì)象組成!面向?qū)ο蟮脑O(shè)計(jì)原則面向?qū)ο蟮脑O(shè)計(jì)原則封裝變化針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程(接口隔離原則)組合優(yōu)于繼承(合成復(fù)用原則)開(kāi)閉原則(對(duì)修改關(guān)閉,對(duì)
2、擴(kuò)展開(kāi)放)要依賴(lài)抽象,不要依賴(lài)具體類(lèi)(依賴(lài)倒轉(zhuǎn)原則)最少知識(shí)原則,只和你的密友談話(迪米特法則)別調(diào)用我們,我們會(huì)調(diào)用你一個(gè)類(lèi)應(yīng)該只有一個(gè)引起變化的原因(單一職責(zé)原則)LiskovSubstitutionPrinciple(里氏替換原則)設(shè)計(jì)目標(biāo)是方向,設(shè)計(jì)原則是方法,設(shè)計(jì)模式是手段.設(shè)計(jì)模式詳解策略模式:定義了算法族,分別封裝起來(lái),算法之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。設(shè)計(jì)模式詳解策略模式要點(diǎn):定義了算法族,分別封裝起來(lái),算法之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。設(shè)計(jì)模式詳解觀察者模式:定義了對(duì)象之間的一對(duì)多依賴(lài),這樣一來(lái),當(dāng)一個(gè)對(duì)象改變
3、狀態(tài)時(shí),它的所有依賴(lài)者都會(huì)收到通知并自動(dòng)更新。設(shè)計(jì)模式詳解觀察者模式要點(diǎn):觀察者模式定義了對(duì)象之間一對(duì)多的關(guān)系主題(也就是可觀察者)用一個(gè)共同的接口來(lái)更新觀察者觀察者和可觀察者之間用松耦合方式結(jié)合(loosecoupling),可觀察者不知道觀察者的細(xì)節(jié),只知道觀察者實(shí)現(xiàn)了觀察者接口使用此模式時(shí),你可從被觀察者處推(push)或拉(pull)數(shù)據(jù)(然而,推的方式被認(rèn)為更“正確”)有多個(gè)觀察者時(shí),不可以依賴(lài)特定的通知次序Java有多種觀察者模式的實(shí)現(xiàn),包括了通用的java.util.Observable要注意java.util.Observable實(shí)現(xiàn)上所帶來(lái)的一些問(wèn)題設(shè)計(jì)模式詳解裝飾
4、者模式:裝飾者模式可以動(dòng)態(tài)地將責(zé)任附加到對(duì)象上,若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。設(shè)計(jì)模式詳解裝飾者模式要點(diǎn):裝飾者模式也可以讓我們擴(kuò)展被裝飾者的行為。裝飾者模式意味著一群裝飾者類(lèi),這些類(lèi)用來(lái)包裝具體組件。裝飾者類(lèi)反映出被裝飾的組件類(lèi)型(事實(shí)上,他們具有相同的類(lèi)型,都經(jīng)過(guò)接口或繼承實(shí)現(xiàn))。裝飾者可以在被裝飾者的行為前面與/或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的。你可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件。裝飾者一般對(duì)組件的客戶是透明的,除非客戶程序依賴(lài)于組件的具體類(lèi)型。裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象,如果過(guò)度使用,會(huì)讓程序變得很復(fù)雜。設(shè)計(jì)模式
5、詳解工廠方法模式:定義了一個(gè)創(chuàng)建對(duì)象的接口,但由子類(lèi)決定要實(shí)例化的類(lèi)是哪一個(gè)。工廠方法讓類(lèi)把實(shí)例化推遲到子類(lèi)。設(shè)計(jì)模式詳解工廠模式要點(diǎn):所有的工作都是用來(lái)封裝對(duì)象的創(chuàng)建。簡(jiǎn)單工廠,雖然不是真正的設(shè)計(jì)模式,但仍不失為一個(gè)簡(jiǎn)單的方法,可以將客戶程序從具體類(lèi)解耦。工廠方法使用繼承,把對(duì)象的創(chuàng)建委托給子類(lèi),子類(lèi)實(shí)現(xiàn)工廠方法來(lái)創(chuàng)建對(duì)象。抽象工廠使用對(duì)象組合,對(duì)象的創(chuàng)建被實(shí)現(xiàn)在工廠接口所暴露出來(lái)的方法中。所有工廠模式都通過(guò)減少應(yīng)用程序和具體類(lèi)之間的以來(lái)促進(jìn)松耦合。工廠方法允許類(lèi)將實(shí)例化延遲到子類(lèi)進(jìn)行。抽象工廠創(chuàng)建相關(guān)的對(duì)象家族,而不需要依賴(lài)它們的具體類(lèi)。依賴(lài)倒置原則,指導(dǎo)我們避免依賴(lài)具體類(lèi)型,而
6、要盡量依賴(lài)抽象。工廠是很有威力的技巧,幫助我們針對(duì)抽象編程,而不要針對(duì)具體類(lèi)編程。設(shè)計(jì)模式詳解單件模式:確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。設(shè)計(jì)模式詳解單件模式要點(diǎn):單件模式確保程序中一個(gè)類(lèi)最多只有一個(gè)實(shí)例。單件模式也提供訪問(wèn)這個(gè)實(shí)例的全局點(diǎn)。在java中實(shí)現(xiàn)單件模式需要私有的構(gòu)造器、一個(gè)靜態(tài)方法,一個(gè)靜態(tài)變量。確定在性能和資源上的限制,然后小心地選擇適當(dāng)?shù)姆桨竵?lái)實(shí)現(xiàn)單件,以解決多線程的問(wèn)題。如果不是采用jdk5的jvm,雙重檢查加鎖實(shí)現(xiàn)會(huì)失效。小心,你如果使用多個(gè)類(lèi)加載器,可能導(dǎo)致單件失效而產(chǎn)生多個(gè)實(shí)例。如果使用JVM1.2或之前的版本,你必須建立單件注冊(cè)表,以免垃圾收集
7、器將單件回收。設(shè)計(jì)模式詳解命令模式:將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象,支持可撤消的操作。設(shè)計(jì)模式詳解命令模式要點(diǎn):命令模式將發(fā)出請(qǐng)求的對(duì)象和執(zhí)行請(qǐng)求的對(duì)象解耦。被解耦的兩者之間是通過(guò)命令對(duì)象進(jìn)行溝通的,命令對(duì)象封裝了接受者和一個(gè)或一組動(dòng)作。調(diào)用者通過(guò)調(diào)用命令對(duì)象的execute()發(fā)出請(qǐng)求,著會(huì)使得接收者的動(dòng)作被調(diào)用。調(diào)用者可以接受命令當(dāng)做參數(shù),甚至在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行。命令可以支持撤消,做法是實(shí)現(xiàn)一個(gè)undo()方法來(lái)