




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
設(shè)計(jì)模式與框架源碼理論與實(shí)踐的完美結(jié)合班主任:孫藝萌輔導(dǎo)老師:李小奎主講老師:雷豐陽(yáng)創(chuàng)建型模式(CreationalPatterns)5結(jié)構(gòu)型模式(StructuralPatterns)7行為型模式(BehavioralPatterns)11設(shè)計(jì)模式原則1234設(shè)計(jì)模式導(dǎo)論什么是GOF在1994年,由ErichGamma、RichardHelm、RalphJohnson和JohnVlissides四人合著出版了一本名為DesignPatterns-ElementsofReusableObject-OrientedSoftware(中文譯名:設(shè)計(jì)模式-可復(fù)用的面向?qū)ο筌浖兀┑臅?shū),該書(shū)首次提到了軟件開(kāi)發(fā)中設(shè)計(jì)模式的概念。對(duì)接口編程而不是對(duì)實(shí)現(xiàn)編程。優(yōu)先使用對(duì)象組合而不是繼承。設(shè)計(jì)模式的基石封裝繼承多態(tài)順序判斷循環(huán)設(shè)計(jì)模式總覽創(chuàng)建型模式(CreationalPatterns)單例(Singleton)模式原型(Prototype)模式工廠方法(FactoryMethod)模式抽象工廠(AbstractFactory)模式建造者(Builder)模式行為型模式(BehavioralPatterns)模板方法(TemplateMethod)模式策略(Strategy)模式命令(Command)模式職責(zé)鏈(ChainofResponsibility)模式狀態(tài)(State)模式觀察者(Observer)模式中介者(Mediator)模式迭代器(Iterator)模式訪問(wèn)者(Visitor)模式備忘錄(Memento)模式解釋器(Interpreter)模式結(jié)構(gòu)型模式(StructuralPatterns)代理(Proxy)模式適配器(Adapter)模式橋接(Bridge)模式裝飾(Decorator)模式外觀(Facade)模式享元(Flyweight)模式組合(Composite)模式過(guò)濾器模式(FilterPattern)設(shè)計(jì)模式是一種思想,靈活運(yùn)用思想遠(yuǎn)大于死記代碼、咬文爵字組件的生命周期組件的定義組件的創(chuàng)建組件的服役組件的銷毀創(chuàng)建型模式(CreationalPatterns)結(jié)構(gòu)型模式(StructuralPatterns)行為型模式(BehavioralPatterns)設(shè)計(jì)的7大原則開(kāi)閉原則(OpenClosedPrinciple,OCP)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉(Softwareentitiesshouldbeopenforextension,butclosedformodification)合成復(fù)用原則、里氏替換原則相輔相成,都是開(kāi)閉原則的具體實(shí)現(xiàn)規(guī)范擴(kuò)展新類而不是修改舊類設(shè)計(jì)的7大原則里氏替換原則(LiskovSubstitutionPrinciple,LSP)繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立(Inheritanceshouldensurethatanypropertyprovedaboutsupertypeobjectsalsoholdsforsubtypeobjects)繼承父類而不去改變父類設(shè)計(jì)的7大原則依賴倒置原則(DependenceInversionPrinciple,DIP)高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象(Highlevelmodulesshouldnotdependuponlowlevelmodules.Bothshoulddependuponabstractions.Abstractionsshouldnotdependupondetails.Detailsshoulddependuponabstractions)面向接口編程,而不是面向?qū)崿F(xiàn)類設(shè)計(jì)的7大原則單一職責(zé)原則(SingleResponsibilityPrinciple,SRP)一個(gè)類應(yīng)該有且僅有一個(gè)引起它變化的原因,否則類應(yīng)該被拆分(Thereshouldneverbemorethanonereasonforaclasstochange)每個(gè)類只負(fù)責(zé)自己的事情,而不是變成萬(wàn)能設(shè)計(jì)的7大原則接口隔離原則(InterfaceSegregationPrinciple,ISP)一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上(Thedependencyofoneclasstoanotheroneshoulddependonthesmallestpossibleinterface)。各個(gè)類建立自己的專用接口,而不是建立萬(wàn)能接口設(shè)計(jì)的7大原則迪米特法則(LawofDemeter,LoD)最少知識(shí)原則(LeastKnowledgePrinciple,LKP)只與你的直接朋友交談,不跟“陌生人”說(shuō)話(Talkonlytoyourimmediatefriendsandnottostrangers)無(wú)需直接交互的兩個(gè)類,如果需要交互,使用中間者過(guò)度使用迪米特法則會(huì)使系統(tǒng)產(chǎn)生大量的中介類,從而增加系統(tǒng)的復(fù)雜性,使模塊之間的通信效率降低設(shè)計(jì)的7大原則合成復(fù)用原則(CompositeReusePrinciple,CRP)又叫組合/聚合復(fù)用原則(Composition/AggregateReusePrinciple,CARP)軟件復(fù)用時(shí),要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)優(yōu)先組合,其次繼承創(chuàng)建型模式(CreationalPatterns)單例(Singleton)模式原型(Prototype)模式工廠方法(FactoryMethod)模式抽象工廠(AbstractFactory)模式建造者(Builder)模式為什么用創(chuàng)建型模式創(chuàng)建型模式關(guān)注點(diǎn)“怎樣創(chuàng)建出對(duì)象?”“將對(duì)象的創(chuàng)建與使用分離”。降低系統(tǒng)的耦合度使用者無(wú)需關(guān)注對(duì)象的創(chuàng)建細(xì)節(jié)對(duì)象的創(chuàng)建由相關(guān)的工廠來(lái)完成;(各種工廠模式)對(duì)象的創(chuàng)建由一個(gè)建造者來(lái)完成;(建造者模式)對(duì)象的創(chuàng)建由原來(lái)對(duì)象克隆完成;(原型模式)對(duì)象始終在系統(tǒng)中只有一個(gè)實(shí)例;(單例模式)單例(Singleton)模式一個(gè)單一的類,負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保系統(tǒng)中只有單個(gè)對(duì)象被創(chuàng)建。單例特點(diǎn)某個(gè)類只能有一個(gè)實(shí)例;(構(gòu)造器私有)它必須自行創(chuàng)建這個(gè)實(shí)例;(自己編寫(xiě)實(shí)例化邏輯)它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例;(對(duì)外提供實(shí)例化方法)單例(Singleton)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?多線程中的線程池?cái)?shù)據(jù)庫(kù)的連接池系統(tǒng)環(huán)境信息上下文(ServletContext)......面試問(wèn)題系統(tǒng)環(huán)境信息(System.getProperties())?Spring中怎么保持組件單例的?ServletContext是什么(封裝Servlet的信息)?是單例嗎?怎么保證?ApplicationContext是什么?是單例嗎?怎么保證?ApplicationContext:tomcat:一個(gè)應(yīng)用(部署的一個(gè)war包)會(huì)有一個(gè)應(yīng)用上下文ApplicationContext:Spring:表示整個(gè)IOC容器(怎么保證單例的)。ioc容器中有很多組件(怎么保證單例)數(shù)據(jù)庫(kù)連接池一般怎么創(chuàng)建出來(lái)的,怎么保證單實(shí)例?......原型(Prototype)模式原型模式(PrototypePattern)是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。本體給外部提供一個(gè)克隆體進(jìn)行使用原型(Prototype)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?資源優(yōu)化性能和安全要求一個(gè)對(duì)象多個(gè)修改者的場(chǎng)景。一個(gè)對(duì)象需要提供給其他對(duì)象訪問(wèn),而且各個(gè)調(diào)用者可能都需要修改其值時(shí)可以考慮使用原型模式拷貝多個(gè)對(duì)象供調(diào)用者使用。深(兩個(gè)完全對(duì)象不一樣的【遞歸克隆】,內(nèi)容卻完全一樣)、淺(只是屬性賦值)..........原型模式已經(jīng)與Java融為渾然一體,大家可以隨手拿來(lái)使用。工廠(Factory)模式工廠模式(FactoryPattern)提供了一種創(chuàng)建對(duì)象的最佳方式。我們不必關(guān)心對(duì)象的創(chuàng)建細(xì)節(jié),只需要根據(jù)不同情況獲取不同產(chǎn)品即可。難點(diǎn):寫(xiě)好我們的工廠簡(jiǎn)單工廠(SimpleFactory)靜態(tài)工廠工廠方法(FactoryMethod)多態(tài)工廠抽象工廠(AbstractFactory)工廠(Factory)模式-簡(jiǎn)單工廠(SimpleFactory)三個(gè)角色Factory:工廠角色,WuLinFactoryProduct:抽象產(chǎn)品角色,CarConcreteProduct:具體產(chǎn)品角色,VanCar、MiniCar缺點(diǎn):違背開(kāi)閉,擴(kuò)展不易工廠(Factory)模式-工廠方法(FactoryMethod)四個(gè)角色Product:抽象產(chǎn)品ConcreteProduct:具體產(chǎn)品Factory:抽象工廠ConcreteFactory:具體工廠缺點(diǎn):系統(tǒng)復(fù)雜度增加,產(chǎn)品單一工廠(Factory)模式-抽象工廠(AbstractFactory)工廠(Factory)模式-抽象工廠(AbstractFactory)如何實(shí)現(xiàn),人民需要什么,五菱就造什么工廠(Factory)模式-抽象工廠(AbstractFactory)工廠模式的退化當(dāng)抽象工廠模式中每一個(gè)具體工廠類只創(chuàng)建一個(gè)產(chǎn)品對(duì)象,也就是只存在一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)時(shí),抽象工廠模式退化成工廠方法模式;當(dāng)工廠方法模式中抽象工廠與具體工廠合并,提供一個(gè)統(tǒng)一的工廠來(lái)創(chuàng)建產(chǎn)品對(duì)象,并將創(chuàng)建對(duì)象的工廠方法設(shè)計(jì)為靜態(tài)方法時(shí),工廠方法模式退化成簡(jiǎn)單工廠模式。工廠(Factory)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?NumberFormat、SimpleDateFormatLoggerFactory:SqlSessionFactory:MyBatisBeanFactory:Spring的BeanFactory(就是為了造出bean)......建造者(Builder)模式產(chǎn)品角色(Product):Phone抽象建造者(Builder):AbstracPhoneBuilder具體建造者(ConcreteBuilder):PhoneBuilder創(chuàng)建的東西細(xì)節(jié)復(fù)雜,還必須暴露給使用者。屏蔽過(guò)程而不屏蔽細(xì)節(jié)建造者(Builder)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?StringBuilder:append();給誰(shuí)append呢?Swagger-ApiBuilder:快速實(shí)現(xiàn)。Lombok-Builder模式.......編寫(xiě)代碼的時(shí)候使用到了設(shè)計(jì)模式。類+模式xxxFactoryxxxTemplatexxxBuilderxxxFacede......結(jié)構(gòu)型模式(StructuralPattern)適配器模式(AdapterPattern)橋接模式(BridgePattern)過(guò)濾器模式(Filter、CriteriaPattern)組合模式(CompositePattern)裝飾器模式(Decorator/WrapperPattern)外觀模式(FacadePattern)享元模式(FlyweightPattern)代理模式(ProxyPattern)為什么用結(jié)構(gòu)型模式結(jié)構(gòu)型模式關(guān)注點(diǎn)“怎樣組合對(duì)象/類?”所以我們關(guān)注下類的組合關(guān)系類結(jié)構(gòu)型模式關(guān)心類的組合,由多個(gè)類可以組合成一個(gè)更大的(繼承)對(duì)象結(jié)構(gòu)型模式關(guān)心類與對(duì)象的組合,通過(guò)關(guān)聯(lián)關(guān)系在一個(gè)類中定義另一個(gè)類的實(shí)例對(duì)象(組合)根據(jù)“合成復(fù)用原則”,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來(lái)替代繼承關(guān)系,因此大部分結(jié)構(gòu)型模式都是對(duì)象結(jié)構(gòu)型模式。適配器模式(AdapterPattern):兩個(gè)不兼容接口之間適配的橋梁橋接模式(BridgePattern):相同功能抽象化與實(shí)現(xiàn)化解耦,抽象與實(shí)現(xiàn)可以獨(dú)立升級(jí)。過(guò)濾器模式(Filter、CriteriaPattern):使用不同的標(biāo)準(zhǔn)來(lái)過(guò)濾一組對(duì)象組合模式(CompositePattern):相似對(duì)象進(jìn)行組合,形成樹(shù)形結(jié)構(gòu)裝飾器模式(DecoratorPattern):向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)外觀模式(FacadePattern):向現(xiàn)有的系統(tǒng)添加一個(gè)接口,客戶端訪問(wèn)此接口來(lái)隱藏系統(tǒng)的復(fù)雜性。享元模式(FlyweightPattern):嘗試重用現(xiàn)有的同類對(duì)象,如果未找到匹配的對(duì)象,則創(chuàng)建新對(duì)象代理模式(ProxyPattern):一個(gè)類代表另一個(gè)類的功能適配器模式(AdapterPattern)將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,適配器模式使接口不兼容的那些類可以一起工作,適配器模式分為類結(jié)構(gòu)型模式(繼承)和對(duì)象結(jié)構(gòu)型模式(組合)兩種,前者(繼承)類之間的耦合度比后者高,且要求程序員了解現(xiàn)有組件庫(kù)中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對(duì)較少些。適配器模式(Adapter)包含以下主要角色。目標(biāo)(Target)接口:可以是抽象類或接口。客戶希望直接用的接口適配者(Adaptee)類:隱藏的轉(zhuǎn)換接口適配器(Adapter)類:它是一個(gè)轉(zhuǎn)換器,通過(guò)繼承或引用適配者的對(duì)象,把適配者接口轉(zhuǎn)換成目標(biāo)接口。適配器模式(AdapterPattern)適配器模式(AdapterPattern)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?Tomcat如何將Request流轉(zhuǎn)為標(biāo)準(zhǔn)RequestSpringAOP中的AdvisorAdapter是什么SpringMVC中經(jīng)典的HandlerAdapter是什么SpringBoot中WebMvcConfigurerAdapter為什么存在又取消......橋接模式(BridgePattern)將抽象與實(shí)現(xiàn)解耦,使兩者都可以獨(dú)立變化在現(xiàn)實(shí)生活中,某些類具有兩個(gè)或多個(gè)維度的變化,如圖形既可按形狀分,又可按顏色分。如何設(shè)計(jì)類似于Photoshop這樣的軟件,能畫(huà)不同形狀和不同顏色的圖形呢?如果用繼承方式,m種形狀和n種顏色的圖形就有m×n種,不但對(duì)應(yīng)的子類很多,而且擴(kuò)展困難。不同顏色和字體的文字、不同品牌和功率的汽車(chē)橋接將繼承轉(zhuǎn)為關(guān)聯(lián),降低類之間的耦合度,減少代碼量商品渠道電商專供線下銷售拍照手機(jī)拍照、電商拍照、線下性能手機(jī)性能、電商性能、線下橋接模式(BridgePattern)橋接(Bridge)模式包含以下主要角色。抽象化(Abstraction)角色:定義抽象類,并包含一個(gè)對(duì)實(shí)現(xiàn)化對(duì)象的引用。擴(kuò)展抽象化(RefinedAbstraction)角色:是抽象化角色的子類,實(shí)現(xiàn)父類中的業(yè)務(wù)方法,并通過(guò)組合關(guān)系調(diào)用實(shí)現(xiàn)化角色中的業(yè)務(wù)方法。實(shí)現(xiàn)化(Implementor)角色:定義實(shí)現(xiàn)化角色的接口,供擴(kuò)展抽象化角色調(diào)用。具體實(shí)現(xiàn)化(ConcreteImplementor)角色:給出實(shí)現(xiàn)化角色接口的具體實(shí)現(xiàn)。橋接模式(BridgePattern)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?當(dāng)一個(gè)類存在兩個(gè)獨(dú)立變化的維度,且這兩個(gè)維度都需要進(jìn)行擴(kuò)展時(shí)。當(dāng)一個(gè)系統(tǒng)不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加時(shí)。當(dāng)一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性時(shí)。組合模式(CompositePattern)把一組相似的對(duì)象當(dāng)作一個(gè)單一的對(duì)象。如:樹(shù)形菜單組合模式(CompositePattern)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?層級(jí)結(jié)構(gòu)部門(mén)組織結(jié)構(gòu)組合了別的對(duì)象還是組合模式嗎?......裝飾器模式(Decorator/WrapperPattern)向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。屬于對(duì)象結(jié)構(gòu)型模式。創(chuàng)建了一個(gè)裝飾類,用來(lái)包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。裝飾器模式(Decorator/WrapperPattern)抽象構(gòu)件(Component)角色:定義一個(gè)抽象接口以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。具體構(gòu)件(ConcreteComponent)角色:實(shí)現(xiàn)抽象構(gòu)件,通過(guò)裝飾角色為其添加一些職責(zé)。抽象裝飾(Decorator)角色:繼承抽象構(gòu)件,并包含具體構(gòu)件的實(shí)例,可以通過(guò)其子類擴(kuò)展具體構(gòu)件的功能。具體裝飾(ConcreteDecorator)角色:實(shí)現(xiàn)抽象裝飾的相關(guān)方法,并給具體構(gòu)件對(duì)象添加附加的責(zé)任。裝飾器模式(Decorator/WrapperPattern)-應(yīng)用場(chǎng)景什么場(chǎng)景使用?SpringSession中如何進(jìn)行session與redis關(guān)聯(lián)?HttpRequestWrapperMyBatisPlus提取了QueryWrapper,這是什么?Spring中的BeanWrapper是做什么?SpringWebflux中的WebHandlerDecorator?......外觀模式(FacadePattern)外觀(Facade)模式又叫作門(mén)面模式,是一種通過(guò)為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問(wèn)的模式外觀模式(FacadePattern)-應(yīng)用場(chǎng)景什么場(chǎng)景使用?去醫(yī)院看病,可能要去掛號(hào)、門(mén)診、劃價(jià)、取藥,讓患者或患者家屬覺(jué)得很復(fù)雜,如果有提供接待人員,只讓接待人員來(lái)處理,就很方便。以此類比......JAVA的三層開(kāi)發(fā)模式。分布式系統(tǒng)的網(wǎng)關(guān)Tomcat源碼中的RequestFacade干什么的?......代理模式(ProxyPattern)代理模式(ProxyPattern),給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用,對(duì)象結(jié)構(gòu)型模式。這種也是靜態(tài)代理代理模式包含如下角色:Subject:抽象主體角色(抽象類或接口)Proxy:代理主體角色(代理對(duì)象類)RealSubject:真實(shí)主體角色(被代理對(duì)象類)代理模式(ProxyPattern)JDK動(dòng)態(tài)代理cglib動(dòng)態(tài)代理代理模式和裝飾器模式區(qū)別在哪里?代理模式(ProxyPattern)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?MyBatis的mapper到底是什么?怎么生成的?Seata的DataSourceProxy是什么?DruidDataSource存在的Proxy模式......享元模式(FlyweightPattern)享元模式(FlyweightPattern),運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度對(duì)象的復(fù)用。系統(tǒng)只使用少量的對(duì)象,而這些對(duì)象都很相似,狀態(tài)變化很小,可以實(shí)現(xiàn)對(duì)象的多次復(fù)用。對(duì)象結(jié)構(gòu)型在享元模式中可以共享的相同內(nèi)容稱為內(nèi)部狀態(tài)(IntrinsicState),而那些需要外部環(huán)境來(lái)設(shè)置的不能共享的內(nèi)容稱為外部狀態(tài)(ExtrinsicState),由于區(qū)分了內(nèi)部狀態(tài)和外部狀態(tài),因此可以通過(guò)設(shè)置不同的外部狀態(tài)使得相同的對(duì)象可以具有一些不同的特征,而相同的內(nèi)部狀態(tài)是可以共享的。在享元模式中通常會(huì)出現(xiàn)工廠模式,需要?jiǎng)?chuàng)建一個(gè)享元工廠來(lái)負(fù)責(zé)維護(hù)一個(gè)享元池(FlyweightPool)用于存儲(chǔ)具有相同內(nèi)部狀態(tài)的享元對(duì)象。享元模式包含如下角色:Flyweight:抽象享元類ConcreteFlyweight:具體享元類UnsharedConcreteFlyweight:非共享具體享元類FlyweightFactory:享元工廠類享元模式(FlyweightPattern)初始化加載很多User對(duì)象,形成對(duì)象池享元模式(FlyweightPattern)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?典型的代表:數(shù)據(jù)庫(kù)連接池所有的池化技術(shù)享元和原型模式有什么區(qū)別?享元是預(yù)先準(zhǔn)備好的對(duì)象進(jìn)行復(fù)用,原型沒(méi)法確定預(yù)先有哪些......過(guò)濾器模式(FilterPattern)使用不同的標(biāo)準(zhǔn)來(lái)過(guò)濾一組對(duì)象,通過(guò)邏輯運(yùn)算以解耦的方式把它們連接起來(lái)。結(jié)合多個(gè)標(biāo)準(zhǔn)來(lái)獲得單一標(biāo)準(zhǔn)
行為型模式(BehavioralPatterns)模板方法(TemplateMethod)模式策略(Strategy)模式狀態(tài)(State)模式
中介者(Mediator)模式觀察者(Observer)模式備忘錄(Memento)模式解釋器(Interpreter)模式命令(Command)模式迭代器(Iterator)模式訪問(wèn)者(Visitor)模式職責(zé)鏈(ChainofResponsibility)模式
為什么用行為型模式行為型模式關(guān)注點(diǎn)“怎樣運(yùn)行對(duì)象/類?”所以我們關(guān)注下類/對(duì)象的運(yùn)行時(shí)流程控制行為型模式用于描述程序在運(yùn)行時(shí)復(fù)雜的流程控制,描述多個(gè)類或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù),它涉及算法與對(duì)象間職責(zé)的分配。行為型模式分為類行為模式和對(duì)象行為模式,前者采用繼承機(jī)制來(lái)在類間分派行為,后者采用組合或聚合在對(duì)象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對(duì)象行為模式比類行為模式具有更大的靈活性。為什么用行為型模式模板方法(TemplateMethod)模式:父類定義算法骨架,某些實(shí)現(xiàn)放在子類策略(Strategy)模式:每種算法獨(dú)立封裝,根據(jù)不同情況使用不同算法策略狀態(tài)(State)模式:每種狀態(tài)獨(dú)立封裝,不同狀態(tài)內(nèi)部封裝了不同行為命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開(kāi)職責(zé)鏈(ChainofResponsibility)模式:所有處理者封裝為鏈?zhǔn)浇Y(jié)構(gòu),依次調(diào)用備忘錄(Memento)模式:把核心信息抽取出來(lái),可以進(jìn)行保存解釋器(Interpreter)模式:定義語(yǔ)法解析規(guī)則觀察者(Observer)模式:維護(hù)多個(gè)觀察者依賴,狀態(tài)變化通知所有觀察者中介者(Mediator)模式:取消類/對(duì)象的直接調(diào)用關(guān)系,使用中介者維護(hù)迭代器(Iterator)模式:定義集合數(shù)據(jù)的遍歷規(guī)則訪問(wèn)者(Visitor)模式:分離對(duì)象結(jié)構(gòu),與元素的執(zhí)行算法除了模板方法模式和解釋器模式是類行為型模式,其他的全部屬于對(duì)象行為型模式模板方法(TemplateMethod)在模板模式(TemplatePattern)中,一個(gè)抽象類公開(kāi)定義了執(zhí)行它的方法的方式模板。它的子類可以按需要重寫(xiě)方法實(shí)現(xiàn),但調(diào)用將以抽象類中定義的方式進(jìn)行。模板方法(TemplateMethod)包含兩個(gè)角色抽象類/抽象模板(AbstractClass)具體子類/具體實(shí)現(xiàn)(ConcreteClass)模板方法(TemplateMethod)-應(yīng)用場(chǎng)景什么場(chǎng)景用到?Spring的整個(gè)繼承體系都基本用到模板方法JdbcTemplate、RedisTemplate都允許我們?cè)贁U(kuò)展.....我們自己的系統(tǒng)也應(yīng)該使用模板方法組織類結(jié)構(gòu)......策略(Strategy)模式策略(Strategy)模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。屬于對(duì)象行為模式。策略模式的主要角色如下。抽象策略(Strategy)類:公共接口,各種不同的算法以不同的方式實(shí)現(xiàn)這個(gè)接口,環(huán)境角色使用這個(gè)接口調(diào)用不同的算法,一般使用接口或抽象類實(shí)現(xiàn)。具體策略(ConcreteStrategy)類:實(shí)現(xiàn)了抽象策略定義的接口,提供具體的算法實(shí)現(xiàn)。環(huán)境(Context)類:持有一個(gè)策略類的引用,最終給客戶端調(diào)用。策略(Strategy)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?使用策略模式可以避免使用多重條件語(yǔ)句,如if...else語(yǔ)句、switch...case語(yǔ)句什么是Spring的InstantiationStrategy線程池拒絕策略......狀態(tài)(State)模式狀態(tài)(State)模式:對(duì)有狀態(tài)的對(duì)象,把復(fù)雜的“判斷邏輯”提取到不同的狀態(tài)對(duì)象中,允許狀態(tài)對(duì)象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為。狀態(tài)模式包含以下主要角色。環(huán)境類(Context)角色:也稱為上下文,它定義了客戶端需要的接口,內(nèi)部維護(hù)一個(gè)當(dāng)前狀態(tài),并負(fù)責(zé)具體狀態(tài)的切換。抽象狀態(tài)(State)角色:定義一個(gè)接口,用以封裝環(huán)境對(duì)象中的特定狀態(tài)所對(duì)應(yīng)的行為,可以有一個(gè)或多個(gè)行為。具體狀態(tài)(ConcreteState)角色:實(shí)現(xiàn)抽象狀態(tài)所對(duì)應(yīng)的行為,并且在需要的情況下進(jìn)行狀態(tài)切換。狀態(tài)(State)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?策略模式和狀態(tài)模式是一樣的?狀態(tài)模式更關(guān)注做什么,策略模式更關(guān)注怎么做流程框架與狀態(tài)機(jī)......中介者(Mediator)模式中介者(Mediator)模式中介者模式(MediatorPattern):用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,減少對(duì)象間混亂的依賴關(guān)系,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。對(duì)象行為型模式。Mediator:抽象中介者ConcreteMediator:具體中介者Colleague:抽象同事類ConcreteColleague:具體同事類中介者(Mediator)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?SpringMVC的DispatcherServlet是一個(gè)中介者,他會(huì)提取Controller、Model、View來(lái)進(jìn)行調(diào)用。而無(wú)需controller直接調(diào)用view之類的渲染方法分布式系統(tǒng)中的網(wǎng)關(guān)迪米特法則的一個(gè)典型應(yīng)用.......觀察者(Observer)模式觀察者模式(ObserverPattern):定義對(duì)象間的一種一對(duì)多依賴關(guān)系,使得每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對(duì)象皆得到通知并被自動(dòng)更新。觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽(tīng)器(Source/Listener)模式或從屬者(Dependents)模式。對(duì)象行為型模式Subject:目標(biāo)ConcreteSubject:具體目標(biāo)Observer:觀察者ConcreteObserver:具體觀察者觀察者(Observer)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?Spring事件機(jī)制如何實(shí)現(xiàn)?Vue的雙向綁定核心響應(yīng)式編程核心思想......備忘錄(Memento)模式備忘錄(Memento)模式:在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),以便以后當(dāng)需要時(shí)能將該對(duì)象恢復(fù)到原先保存的狀態(tài)。該模式又叫快照模式。對(duì)象行為型模式發(fā)起人(Originator)角色:記錄當(dāng)前時(shí)刻的內(nèi)部狀態(tài)信息,提供創(chuàng)建備忘錄和恢復(fù)備忘錄數(shù)據(jù)的功能,實(shí)現(xiàn)其他業(yè)務(wù)功能,它可以訪問(wèn)備忘錄里的所有信息。備忘錄(Memento)角色:負(fù)責(zé)存儲(chǔ)發(fā)起人的內(nèi)部狀態(tài),在需要的時(shí)候提供這些內(nèi)部狀態(tài)給發(fā)起人。管理者(Caretaker)角色:對(duì)備忘錄進(jìn)行管理,提供保存與獲取備忘錄的功能,但其不能對(duì)備忘錄的內(nèi)容進(jìn)行訪問(wèn)與修改。備忘錄(Memento)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?游戲存檔數(shù)據(jù)庫(kù)保存點(diǎn)事務(wù)(savepoint)session活化鈍化......解釋器(Interpreter)模式解釋器(Interpreter)模式:給分析對(duì)象定義一個(gè)語(yǔ)言,并定義該語(yǔ)言的文法表示,再設(shè)計(jì)一個(gè)解析器來(lái)解釋語(yǔ)言中的句子。也就是說(shuō),用編譯語(yǔ)言的方式來(lái)分析應(yīng)用中的實(shí)例。這種模式實(shí)現(xiàn)了文法表達(dá)式處理的接口,該接口解釋一個(gè)特定的上下文。類行為型模式抽象表達(dá)式(AbstractExpression)角色:定義解釋器的接口,約定解釋器的解釋操作,主要包含解釋方法interpret()。終結(jié)符表達(dá)式(TerminalExpression)角色:是抽象表達(dá)式的子類,用來(lái)實(shí)現(xiàn)文法中與終結(jié)符相關(guān)的操作,文法中的每一個(gè)終結(jié)符都有一個(gè)具體終結(jié)表達(dá)式與之相對(duì)應(yīng)。非終結(jié)符表達(dá)式(NonterminalExpression)角色:也是抽象表達(dá)式的子類,用來(lái)實(shí)現(xiàn)文法中與非終結(jié)符相關(guān)的操作,文法中的每條規(guī)則都對(duì)應(yīng)于一個(gè)非終結(jié)符表達(dá)式。環(huán)境(Context)角色:通常包含各個(gè)解釋器需要的數(shù)據(jù)或是公共的功能,一般用來(lái)傳遞被所有解釋器共享的數(shù)據(jù),后面的解釋器可以從這里獲取這些值。客戶端(Client):主要任務(wù)是將需要分析的句子或表達(dá)式轉(zhuǎn)換成使用解釋器對(duì)象描述的抽象語(yǔ)法樹(shù),然后調(diào)用解釋器的解釋方法,當(dāng)然也可以通過(guò)環(huán)境角色間接訪問(wèn)解釋器的解釋方法。解釋器(Interpreter)模式解釋器(Interpreter)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?Spring的表達(dá)式解析:#{}Thymeleaf等模板引擎的語(yǔ)法解析編譯原理......命令(Command)模式命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開(kāi)。這樣兩者之間通過(guò)命令對(duì)象進(jìn)行溝通,這樣方便將命令對(duì)象進(jìn)行儲(chǔ)存、傳遞、調(diào)用、增加與管理。命令模式包含以下主要角色。抽象命令類(Command)角色:聲明執(zhí)行命令的接口,擁有執(zhí)行命令的抽象方法execute()。具體命令類(ConcreteCommand)角色:是抽象命令類的具體實(shí)現(xiàn)類,它擁有接收者對(duì)象,并通過(guò)調(diào)用接收者的功能來(lái)完成命令要執(zhí)行的操作。實(shí)現(xiàn)者/接收者(Receiver)角色:執(zhí)行命令功能的相關(guān)操作,是具體命令對(duì)象業(yè)務(wù)的真正實(shí)現(xiàn)者。調(diào)用者/請(qǐng)求者(Invoker)角色:是請(qǐng)求的發(fā)送者,它通常擁有很多的命令對(duì)象,并通過(guò)訪問(wèn)命令對(duì)象來(lái)執(zhí)行相關(guān)請(qǐng)求,它不直接訪問(wèn)接收者。命令(Command)模式命令(Command)模式-應(yīng)用場(chǎng)景什么場(chǎng)景用到?mvc就是典型的命令模式當(dāng)系統(tǒng)需要執(zhí)行一組操作時(shí),命令模式可以定義宏命令(一個(gè)命令組合了多個(gè)命令)來(lái)實(shí)現(xiàn)該功能。結(jié)合備忘錄模式還可以實(shí)現(xiàn)命令的撤銷和恢復(fù)......迭代器(Iterator)模式迭代器(Iterator)模式:提供一個(gè)對(duì)象(迭代器)來(lái)順序訪問(wèn)聚合對(duì)象(迭代數(shù)據(jù))中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。對(duì)象行為型模式抽象聚合(Aggregate)角色:定義存儲(chǔ)、添加、刪除聚合對(duì)象以及創(chuàng)建迭代器對(duì)象的接口。具體聚合(ConcreteAggregate)角色:實(shí)現(xiàn)抽象聚合類,返回一個(gè)具體迭代器的實(shí)例。抽象迭代器(Iterator)角色:定義訪問(wèn)和遍歷聚合元素的接口,通常包含hasNext()、first()、next(
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 解聘合同協(xié)議書(shū)范文模板
- 小間距LED顯示發(fā)展趨勢(shì)
- 地下室合同協(xié)議書(shū)
- 總經(jīng)理2022工作報(bào)告
- 合同利潤(rùn)分成協(xié)議書(shū)范本
- 月子中心入住合同協(xié)議書(shū)
- 汽車(chē)融資租賃行業(yè)商業(yè)計(jì)劃書(shū)
- 會(huì)員玩法策劃方案
- 資質(zhì)借用合同協(xié)議書(shū)保安
- 2025秋五年級(jí)上冊(cè)語(yǔ)文-【17 松鼠】雙減作業(yè)設(shè)計(jì)課件
- 視聽(tīng)語(yǔ)言 第二講 景別與角度
- 日產(chǎn)5000噸水泥熟料生產(chǎn)線窯尾工藝設(shè)計(jì)
- 復(fù)合片鉆頭技術(shù)協(xié)議
- 機(jī)械制圖國(guó)家標(biāo)準(zhǔn)解析
- 人防工程質(zhì)量監(jiān)督要點(diǎn)及常見(jiàn)問(wèn)題培訓(xùn)手冊(cè)
- 國(guó)家開(kāi)放大學(xué)《電工電子技術(shù)》章節(jié)自測(cè)題參考答案
- NEFAB整體包裝解決方案全球性合作伙伴
- 20172018年江蘇A類資料分析真題解析
- 醫(yī)院體檢中心應(yīng)急預(yù)案
- 各層次護(hù)理管理崗位職責(zé)及考核標(biāo)準(zhǔn)Word 文檔
- KTV開(kāi)業(yè)活動(dòng)策劃方案
評(píng)論
0/150
提交評(píng)論