版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件設(shè)計(jì)模式復(fù)習(xí)軟件設(shè)計(jì)模式復(fù)習(xí)面向?qū)ο笏枷朊嫦驅(qū)ο笏枷雘bject-orientedthought面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)object-oriented design重用方式:繼承、聚合、依賴重用方式:繼承、聚合、依賴問:為什么要優(yōu)先使用聚合少用繼承?問:為什么要優(yōu)先使用聚合少用繼承?理解:高內(nèi)聚低耦合理解:高內(nèi)聚低耦合1. Simple FactoryFactory design patternMyClass createObjectOfRequiredClass(): RequiredClass create objectRequiredClassClientRequiredClass
2、instanceOfRequiredClass = MyClass.getInstanceOfRequiredClass(); 問:什么是設(shè)計(jì)模式?問:什么是設(shè)計(jì)模式? 問:使用靜態(tài)方法問:使用靜態(tài)方法static method定義一個(gè)簡(jiǎn)單工廠?定義一個(gè)簡(jiǎn)單工廠?創(chuàng)建型模式創(chuàng)建型模式2.Factory method工廠方法(工廠方法(FactoryMethod)模式是類的創(chuàng)建模式,其用意是定義一個(gè)創(chuàng)建產(chǎn)品)模式是類的創(chuàng)建模式,其用意是定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類。對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類。ProductConcreteProductCreatorCo
3、ncreteCreatorfactoryMethod()anOperaton()factoryMethod()創(chuàng)建型模式創(chuàng)建型模式問:為什么工廠方法比簡(jiǎn)單工廠的擴(kuò)展性好?問:為什么工廠方法比簡(jiǎn)單工廠的擴(kuò)展性好?ConcreteCreatorfactoryMethod()3.Singleton確保一個(gè)類只有一個(gè)確切的實(shí)例,在整個(gè)應(yīng)用程序中都是可訪問的。確保一個(gè)類只有一個(gè)確切的實(shí)例,在整個(gè)應(yīng)用程序中都是可訪問的。Singleton Design PatternMyClass getSingletonOfMyClass(): MyClass Client1singletonOfMyClassstat
4、icEnsure a class only has one instance, and provide a global point of access to it.創(chuàng)建型模式創(chuàng)建型模式問:你會(huì)定義一個(gè)單態(tài)類?單態(tài)對(duì)象需要自己的屬性和方法呢?問:你會(huì)定義一個(gè)單態(tài)類?單態(tài)對(duì)象需要自己的屬性和方法呢?4.Abstract FactoryAbstractFactorycreateProductA()createProductB()ConcreteFactory1ConcreteFactory2createProductA()createProductB()createProductA()create
5、ProductB()ClientAbstractProductAAbstractProductBProductA2ProductA1ProductB2ProductB1對(duì)象族對(duì)象族(產(chǎn)品家族產(chǎn)品家族)抽象工廠抽象工廠產(chǎn)品等級(jí)結(jié)構(gòu)產(chǎn)品等級(jí)結(jié)構(gòu)工廠方法工廠方法客戶就從具體的產(chǎn)品中被解耦接口創(chuàng)建型模式創(chuàng)建型模式問:抽象工廠可以創(chuàng)建不同類型的產(chǎn)品?問:抽象工廠可以創(chuàng)建不同類型的產(chǎn)品?5.Builder Directorconstruct()For all objects inconstruct() builder.buildPart()BuilderbuildPart()getResult()Conc
6、reteBuilderbuildPart()getResult()Product為創(chuàng)建一個(gè)為創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件對(duì)象的各個(gè)部件指定抽象接口指定抽象接口實(shí)現(xiàn)實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配改產(chǎn)品的各個(gè)部件的接口以構(gòu)造和裝配改產(chǎn)品的各個(gè)部件定義并明確它所創(chuàng)建的表示定義并明確它所創(chuàng)建的表示提供一個(gè)檢索產(chǎn)品的接口提供一個(gè)檢索產(chǎn)品的接口getResult構(gòu)造一個(gè)使用構(gòu)造一個(gè)使用Builder接口的對(duì)象接口的對(duì)象被構(gòu)造的復(fù)雜對(duì)象被構(gòu)造的復(fù)雜對(duì)象生成器生成器導(dǎo)向器導(dǎo)向器-builder: Builder 創(chuàng)建型模式創(chuàng)建型模式問:導(dǎo)向器的作用?問:導(dǎo)向器的作用?問:?jiǎn)枺篻etResult(
7、)作用?作用?clientTargetrequest()AdapteespecificRequest()Adapterrequest()implementationspecificRequest()定義定義Client使用的與特定領(lǐng)域相關(guān)的接口使用的與特定領(lǐng)域相關(guān)的接口定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配對(duì)對(duì)Adaptee的接口與的接口與Target接口進(jìn)行適配接口進(jìn)行適配特定需求特定需求inheritance6.Adapter結(jié)構(gòu)型模式結(jié)構(gòu)型模式問:類適配器和對(duì)象適配器的適用性?7.Bridge ClientAbstractionoperation
8、()RefinedAbstractionimp.operationImp()ImplementoroperationImp()ConcreteImplementorAConcreteImplementorBoperationImp()operationImp()imp定義抽象類的接口定義抽象類的接口維護(hù)一個(gè)指向維護(hù)一個(gè)指向Implementor類型對(duì)象的引用類型對(duì)象的引用定義實(shí)現(xiàn)類的接口,該接口與定義實(shí)現(xiàn)類的接口,該接口與Abstraction的接口可以的接口可以完全不同。完全不同。Implementor接口僅提供基本操作。接口僅提供基本操作。實(shí)現(xiàn)實(shí)現(xiàn)Implementor接口并定義它的具體實(shí)
9、現(xiàn)接口并定義它的具體實(shí)現(xiàn)被提煉的抽象實(shí)現(xiàn)系統(tǒng)可能有多角度分類,每一種分類都有可能變化,那么就把這種多角度分離出來讓它們獨(dú)立變化,減少它們之間的耦合。Handle Body結(jié)構(gòu)型模式結(jié)構(gòu)型模式1.Bridge模式的別名:Handle-Body請(qǐng)?jiān)跇蚪幽J浇Y(jié)構(gòu)圖上標(biāo)出Handle(柄柄)和Body(主體主體)。4分2.什么是橋接模式?4分 3.采用繼承也能滿足客戶需求,為什么效果沒有橋接模式好?4分Componentoperation()add(Component)remove(Component)getChild( )ClientCompositeoperation()add(Component
10、)remove(Component)getChild( )Leafoperation()children1.n-為組合中的對(duì)象聲明接口為組合中的對(duì)象聲明接口-聲明一個(gè)接口用于訪問和管理聲明一個(gè)接口用于訪問和管理Component 的子組件的子組件-在組合中表示葉結(jié)點(diǎn)對(duì)象,葉結(jié)點(diǎn)沒有子結(jié)點(diǎn)在組合中表示葉結(jié)點(diǎn)對(duì)象,葉結(jié)點(diǎn)沒有子結(jié)點(diǎn)-在組合中定義圖元對(duì)象的行為在組合中定義圖元對(duì)象的行為定義有子部件的那些部件的行為定義有子部件的那些部件的行為存儲(chǔ)子部件存儲(chǔ)子部件在在Component接口中實(shí)現(xiàn)與子接口中實(shí)現(xiàn)與子部件有關(guān)的操作部件有關(guān)的操作通過通過Component接口操縱組合部件的對(duì)象接口操縱組合部件
11、的對(duì)象8.Composite結(jié)構(gòu)型模式結(jié)構(gòu)型模式9.DecoratorComponentoperation()ConcreteComponentoperation()Decoratoroperation()ConcreteDecoratorAoperation()addedState()ConcreteDecoratorBoperation()Componentcomponent.operation()operation():DecoratoraddedBehavior()addedBehavior()不必修改具體組件!不必修改具體組件!結(jié)構(gòu)型模式結(jié)構(gòu)型模式10.Faade ClientACl
12、ientBClientCFacadeSubsystem Classes該類包含子系統(tǒng)中全部或部分類的實(shí)例引用。子系統(tǒng)只能有一個(gè)外觀嗎?子系統(tǒng)只能有一個(gè)外觀嗎?結(jié)構(gòu)型模式結(jié)構(gòu)型模式迪米特法則迪米特法則11.ProxySubject+request()Proxy+request()RealSubject+request()ClientrealSubjectrealSubject.request()結(jié)構(gòu)型模式結(jié)構(gòu)型模式了解了解ORB-JavaRMIFlyweightFactory-hashMap:HashMap+getFlyweight(Stringkey):FlyweightFlyweightge
13、tFlyweight(Stringkey)if(hashMap.contains(key)returnhashMap.get(key);elseFlyweightft=newConcreteFlyweight();/?hashMap.put(key,ft);returnft;Flyweight+operation(intextrinsicState)ConcreteFlyweight+operation(intextrinsicState)UnsharedConcreteFlyweight+operation(intextrinsicState)+add()-flyweights12.Flyw
14、eight(享元模式享元模式)-ConcreteFlyweight()String類型就使用了享元模式類型就使用了享元模式復(fù)合享元模式復(fù)合享元模式單純享元模式單純享元模式-hashMapHashMap內(nèi)蘊(yùn)狀態(tài)內(nèi)蘊(yùn)狀態(tài)(Internal State)外蘊(yùn)狀態(tài)外蘊(yùn)狀態(tài)(External State)享元對(duì)象的外蘊(yùn)狀態(tài)必須由客戶端保存,并在享元對(duì)象被創(chuàng)建之后,在需要使用的時(shí)候再傳入到享元對(duì)象內(nèi)部。請(qǐng)將下列結(jié)構(gòu)型模式和描述配對(duì):請(qǐng)將下列結(jié)構(gòu)型模式和描述配對(duì):裝飾者裝飾者包裝另一個(gè)對(duì)象,并提供不同接口。包裝另一個(gè)對(duì)象,并提供不同接口。包裝另一個(gè)對(duì)象,并提供額外的行為。包裝另一個(gè)對(duì)象,并提供額外的行為。包
15、裝另一個(gè)對(duì)象,并控制他的訪問。包裝另一個(gè)對(duì)象,并控制他的訪問。包裝許多對(duì)象以簡(jiǎn)化它們的接口。包裝許多對(duì)象以簡(jiǎn)化它們的接口。包裝另一個(gè)對(duì)象,并提供相同接口。包裝另一個(gè)對(duì)象,并提供相同接口。外觀外觀代理代理適配器適配器組合組合模式模式描述描述13.IteratorClientAggregatecreateIterator()Iteratorfirst()next()isDone()currentItem()ConcreteAggregatecreateIterator()ConcreteIterator行為型模式行為型模式要求:能夠迭代集合中的元素。要求:能夠迭代集合中的元素。AbstractCl
16、ass+templateMathod()#abstractMethod()#hookMethod()-concreteMethod()abstractMethod()hookMethod()concreteMethod()ConcreteClass1+abstractMethod()+hookMethod()ConcreteClass2primitiveOperation()14.TemplateMathod行為型模式行為型模式Subjectattach(Observer)detach(Observer)notify()ConcreteSubjectsubjectStategetState()
17、setState()return subjectStateObserverupdate()ConcreteObserverobserverStateupdate()subjectobservers目標(biāo)目標(biāo)具體目標(biāo)具體目標(biāo)觀察者觀察者具體觀察者具體觀察者可以有任意多的觀察者觀察可以有任意多的觀察者觀察同一目標(biāo)。同一目標(biāo)。提供注冊(cè)和刪除觀察者對(duì)象提供注冊(cè)和刪除觀察者對(duì)象接口。接口。為那些在目標(biāo)為那些在目標(biāo)發(fā)生改變時(shí)需發(fā)生改變時(shí)需獲得通知的對(duì)獲得通知的對(duì)象定義一個(gè)更象定義一個(gè)更新接口新接口當(dāng)具體目標(biāo)對(duì)象的狀態(tài)發(fā)生當(dāng)具體目標(biāo)對(duì)象的狀態(tài)發(fā)生改變時(shí),向各個(gè)觀察者發(fā)出通知改變時(shí),向各個(gè)觀察者發(fā)出通知存儲(chǔ)有關(guān)
18、狀態(tài),這些狀態(tài)應(yīng)與存儲(chǔ)有關(guān)狀態(tài),這些狀態(tài)應(yīng)與目標(biāo)的狀態(tài)保持一致目標(biāo)的狀態(tài)保持一致15.Observer行為型模式行為型模式ClientHandlerhandleRequest()successorConcreteHandler1ConcreteHandler2handleRequest()handleRequest()一個(gè)典型的對(duì)象結(jié)構(gòu)可能如下圖所示:一個(gè)典型的對(duì)象結(jié)構(gòu)可能如下圖所示:aClientaHandleraConcreteHandleraConcreteHandlersuccessorsuccessor定義一個(gè)處理請(qǐng)求的接口。定義一個(gè)處理請(qǐng)求的接口。實(shí)現(xiàn)后繼鏈。實(shí)現(xiàn)后繼鏈。處理它所負(fù)
19、責(zé)的請(qǐng)求。處理它所負(fù)責(zé)的請(qǐng)求。可訪問它的后繼者。可訪問它的后繼者。如果可處理該請(qǐng)求,就處理之如果可處理該請(qǐng)求,就處理之否則將該請(qǐng)求轉(zhuǎn)發(fā)給它的后繼者。否則將該請(qǐng)求轉(zhuǎn)發(fā)給它的后繼者。16. Chain of Responsibility行為型模式行為型模式MediatorColleague - mediatorConcreteMediatorConcreteColleague1ConcreteColleague2中介者定義一個(gè)接口用于與各同事中介者定義一個(gè)接口用于與各同事(Colleague)對(duì)象通信。對(duì)象通信。 具體中介者通過協(xié)調(diào)各同事對(duì)象實(shí)現(xiàn)協(xié)作行為。具體中介者通過協(xié)調(diào)各同事對(duì)象實(shí)現(xiàn)協(xié)作行為。 每一個(gè)同事類都知道它的中介者對(duì)象。每一個(gè)同事類都知道它的中介者對(duì)象。 每一個(gè)同事對(duì)象在需與其他的同事通信的時(shí)候,每一個(gè)同事對(duì)象在需與其他的同事通信的時(shí)候,僅僅與它的中介者通信。僅僅與它的中介者通信。 Colleague (Mediator mediator)-17.Mediator行為型模式行為型模式迪米特法則迪米特法則Contextstate: State+request( ):v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 愚人節(jié)活動(dòng)策劃 合集15篇
- 廣告專業(yè)實(shí)習(xí)報(bào)告15篇
- 心靈捕手觀后感9篇
- 團(tuán)學(xué)干部培訓(xùn)課程
- 徒弟代表發(fā)言稿15篇
- 語文學(xué)科研究性學(xué)習(xí)的思考與實(shí)踐
- 智研咨詢發(fā)布-2024年中國集成電路行業(yè)產(chǎn)業(yè)鏈全景分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 靜力水準(zhǔn)系統(tǒng)在合肥光源的安裝調(diào)試及其在ATL模型研究中的應(yīng)用
- 二零二五年度綠色建筑物業(yè)安全管理責(zé)任書3篇
- 二零二五年度個(gè)人家電產(chǎn)品分期購買合同
- 化學(xué)-河南省TOP二十名校2025屆高三調(diào)研考試(三)試題和答案
- 智慧農(nóng)貿(mào)批發(fā)市場(chǎng)平臺(tái)規(guī)劃建設(shè)方案
- 小學(xué)數(shù)學(xué)分?jǐn)?shù)四則混合運(yùn)算300題帶答案
- 林下野雞養(yǎng)殖建設(shè)項(xiàng)目可行性研究報(bào)告
- 2023年水利部黃河水利委員會(huì)招聘考試真題
- Python編程基礎(chǔ)(項(xiàng)目式微課版)教案22
- 01J925-1壓型鋼板、夾芯板屋面及墻體建筑構(gòu)造
- 欠電費(fèi)合同范本
- 2024年新高考地區(qū)數(shù)學(xué)選擇題填空壓軸題匯編十八含解析
- 大型商場(chǎng)招商招租方案(2篇)
- 2022年袋鼠數(shù)學(xué)競(jìng)賽真題一二年級(jí)組含答案
評(píng)論
0/150
提交評(píng)論