設(shè)計模式與框架源碼_第1頁
設(shè)計模式與框架源碼_第2頁
設(shè)計模式與框架源碼_第3頁
設(shè)計模式與框架源碼_第4頁
設(shè)計模式與框架源碼_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

設(shè)計模式與框架源碼理論與實踐的完美結(jié)合班主任:孫藝萌輔導(dǎo)老師:李小奎主講老師:雷豐陽創(chuàng)建型模式(CreationalPatterns)5結(jié)構(gòu)型模式(StructuralPatterns)7行為型模式(BehavioralPatterns)11設(shè)計模式原則1234設(shè)計模式導(dǎo)論什么是GOF在1994年,由ErichGamma、RichardHelm、RalphJohnson和JohnVlissides四人合著出版了一本名為DesignPatterns-ElementsofReusableObject-OrientedSoftware(中文譯名:設(shè)計模式-可復(fù)用的面向?qū)ο筌浖兀┑臅摃状翁岬搅塑浖_發(fā)中設(shè)計模式的概念。對接口編程而不是對實現(xiàn)編程。優(yōu)先使用對象組合而不是繼承。設(shè)計模式的基石封裝繼承多態(tài)順序判斷循環(huán)設(shè)計模式總覽創(chuàng)建型模式(CreationalPatterns)單例(Singleton)模式原型(Prototype)模式工廠方法(FactoryMethod)模式抽象工廠(AbstractFactory)模式建造者(Builder)模式行為型模式(BehavioralPatterns)模板方法(TemplateMethod)模式策略(Strategy)模式命令(Command)模式職責(zé)鏈(ChainofResponsibility)模式狀態(tài)(State)模式觀察者(Observer)模式中介者(Mediator)模式迭代器(Iterator)模式訪問者(Visitor)模式備忘錄(Memento)模式解釋器(Interpreter)模式結(jié)構(gòu)型模式(StructuralPatterns)代理(Proxy)模式適配器(Adapter)模式橋接(Bridge)模式裝飾(Decorator)模式外觀(Facade)模式享元(Flyweight)模式組合(Composite)模式過濾器模式(FilterPattern)設(shè)計模式是一種思想,靈活運用思想遠大于死記代碼、咬文爵字組件的生命周期組件的定義組件的創(chuàng)建組件的服役組件的銷毀創(chuàng)建型模式(CreationalPatterns)結(jié)構(gòu)型模式(StructuralPatterns)行為型模式(BehavioralPatterns)設(shè)計的7大原則開閉原則(OpenClosedPrinciple,OCP)軟件實體應(yīng)當對擴展開放,對修改關(guān)閉(Softwareentitiesshouldbeopenforextension,butclosedformodification)合成復(fù)用原則、里氏替換原則相輔相成,都是開閉原則的具體實現(xiàn)規(guī)范擴展新類而不是修改舊類設(shè)計的7大原則里氏替換原則(LiskovSubstitutionPrinciple,LSP)繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立(Inheritanceshouldensurethatanypropertyprovedaboutsupertypeobjectsalsoholdsforsubtypeobjects)繼承父類而不去改變父類設(shè)計的7大原則依賴倒置原則(DependenceInversionPrinciple,DIP)高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細節(jié),細節(jié)應(yīng)該依賴抽象(Highlevelmodulesshouldnotdependuponlowlevelmodules.Bothshoulddependuponabstractions.Abstractionsshouldnotdependupondetails.Detailsshoulddependuponabstractions)面向接口編程,而不是面向?qū)崿F(xiàn)類設(shè)計的7大原則單一職責(zé)原則(SingleResponsibilityPrinciple,SRP)一個類應(yīng)該有且僅有一個引起它變化的原因,否則類應(yīng)該被拆分(Thereshouldneverbemorethanonereasonforaclasstochange)每個類只負責(zé)自己的事情,而不是變成萬能設(shè)計的7大原則接口隔離原則(InterfaceSegregationPrinciple,ISP)一個類對另一個類的依賴應(yīng)該建立在最小的接口上(Thedependencyofoneclasstoanotheroneshoulddependonthesmallestpossibleinterface)。各個類建立自己的專用接口,而不是建立萬能接口設(shè)計的7大原則迪米特法則(LawofDemeter,LoD)最少知識原則(LeastKnowledgePrinciple,LKP)只與你的直接朋友交談,不跟“陌生人”說話(Talkonlytoyourimmediatefriendsandnottostrangers)無需直接交互的兩個類,如果需要交互,使用中間者過度使用迪米特法則會使系統(tǒng)產(chǎn)生大量的中介類,從而增加系統(tǒng)的復(fù)雜性,使模塊之間的通信效率降低設(shè)計的7大原則合成復(fù)用原則(CompositeReusePrinciple,CRP)又叫組合/聚合復(fù)用原則(Composition/AggregateReusePrinciple,CARP)軟件復(fù)用時,要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來實現(xiàn),其次才考慮使用繼承關(guān)系來實現(xiàn)優(yōu)先組合,其次繼承創(chuàng)建型模式(CreationalPatterns)單例(Singleton)模式原型(Prototype)模式工廠方法(FactoryMethod)模式抽象工廠(AbstractFactory)模式建造者(Builder)模式為什么用創(chuàng)建型模式創(chuàng)建型模式關(guān)注點“怎樣創(chuàng)建出對象?”“將對象的創(chuàng)建與使用分離”。降低系統(tǒng)的耦合度使用者無需關(guān)注對象的創(chuàng)建細節(jié)對象的創(chuàng)建由相關(guān)的工廠來完成;(各種工廠模式)對象的創(chuàng)建由一個建造者來完成;(建造者模式)對象的創(chuàng)建由原來對象克隆完成;(原型模式)對象始終在系統(tǒng)中只有一個實例;(單例模式)單例(Singleton)模式一個單一的類,負責(zé)創(chuàng)建自己的對象,同時確保系統(tǒng)中只有單個對象被創(chuàng)建。單例特點某個類只能有一個實例;(構(gòu)造器私有)它必須自行創(chuàng)建這個實例;(自己編寫實例化邏輯)它必須自行向整個系統(tǒng)提供這個實例;(對外提供實例化方法)單例(Singleton)模式-應(yīng)用場景什么場景用到?多線程中的線程池數(shù)據(jù)庫的連接池系統(tǒng)環(huán)境信息上下文(ServletContext)......面試問題系統(tǒng)環(huán)境信息(System.getProperties())?Spring中怎么保持組件單例的?ServletContext是什么(封裝Servlet的信息)?是單例嗎?怎么保證?ApplicationContext是什么?是單例嗎?怎么保證?ApplicationContext:tomcat:一個應(yīng)用(部署的一個war包)會有一個應(yīng)用上下文ApplicationContext:Spring:表示整個IOC容器(怎么保證單例的)。ioc容器中有很多組件(怎么保證單例)數(shù)據(jù)庫連接池一般怎么創(chuàng)建出來的,怎么保證單實例?......原型(Prototype)模式原型模式(PrototypePattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。本體給外部提供一個克隆體進行使用原型(Prototype)模式-應(yīng)用場景什么場景用到?資源優(yōu)化性能和安全要求一個對象多個修改者的場景。一個對象需要提供給其他對象訪問,而且各個調(diào)用者可能都需要修改其值時可以考慮使用原型模式拷貝多個對象供調(diào)用者使用。深(兩個完全對象不一樣的【遞歸克隆】,內(nèi)容卻完全一樣)、淺(只是屬性賦值)..........原型模式已經(jīng)與Java融為渾然一體,大家可以隨手拿來使用。工廠(Factory)模式工廠模式(FactoryPattern)提供了一種創(chuàng)建對象的最佳方式。我們不必關(guān)心對象的創(chuàng)建細節(jié),只需要根據(jù)不同情況獲取不同產(chǎn)品即可。難點:寫好我們的工廠簡單工廠(SimpleFactory)靜態(tài)工廠工廠方法(FactoryMethod)多態(tài)工廠抽象工廠(AbstractFactory)工廠(Factory)模式-簡單工廠(SimpleFactory)三個角色Factory:工廠角色,WuLinFactoryProduct:抽象產(chǎn)品角色,CarConcreteProduct:具體產(chǎn)品角色,VanCar、MiniCar缺點:違背開閉,擴展不易工廠(Factory)模式-工廠方法(FactoryMethod)四個角色Product:抽象產(chǎn)品ConcreteProduct:具體產(chǎn)品Factory:抽象工廠ConcreteFactory:具體工廠缺點:系統(tǒng)復(fù)雜度增加,產(chǎn)品單一工廠(Factory)模式-抽象工廠(AbstractFactory)工廠(Factory)模式-抽象工廠(AbstractFactory)如何實現(xiàn),人民需要什么,五菱就造什么工廠(Factory)模式-抽象工廠(AbstractFactory)工廠模式的退化當抽象工廠模式中每一個具體工廠類只創(chuàng)建一個產(chǎn)品對象,也就是只存在一個產(chǎn)品等級結(jié)構(gòu)時,抽象工廠模式退化成工廠方法模式;當工廠方法模式中抽象工廠與具體工廠合并,提供一個統(tǒng)一的工廠來創(chuàng)建產(chǎn)品對象,并將創(chuàng)建對象的工廠方法設(shè)計為靜態(tài)方法時,工廠方法模式退化成簡單工廠模式。工廠(Factory)模式-應(yīng)用場景什么場景用到?NumberFormat、SimpleDateFormatLoggerFactory:SqlSessionFactory:MyBatisBeanFactory:Spring的BeanFactory(就是為了造出bean)......建造者(Builder)模式產(chǎn)品角色(Product):Phone抽象建造者(Builder):AbstracPhoneBuilder具體建造者(ConcreteBuilder):PhoneBuilder創(chuàng)建的東西細節(jié)復(fù)雜,還必須暴露給使用者。屏蔽過程而不屏蔽細節(jié)建造者(Builder)模式-應(yīng)用場景什么場景用到?StringBuilder:append();給誰append呢?Swagger-ApiBuilder:快速實現(xiàn)。Lombok-Builder模式.......編寫代碼的時候使用到了設(shè)計模式。類+模式xxxFactoryxxxTemplatexxxBuilderxxxFacede......結(jié)構(gòu)型模式(StructuralPattern)適配器模式(AdapterPattern)橋接模式(BridgePattern)過濾器模式(Filter、CriteriaPattern)組合模式(CompositePattern)裝飾器模式(Decorator/WrapperPattern)外觀模式(FacadePattern)享元模式(FlyweightPattern)代理模式(ProxyPattern)為什么用結(jié)構(gòu)型模式結(jié)構(gòu)型模式關(guān)注點“怎樣組合對象/類?”所以我們關(guān)注下類的組合關(guān)系類結(jié)構(gòu)型模式關(guān)心類的組合,由多個類可以組合成一個更大的(繼承)對象結(jié)構(gòu)型模式關(guān)心類與對象的組合,通過關(guān)聯(lián)關(guān)系在一個類中定義另一個類的實例對象(組合)根據(jù)“合成復(fù)用原則”,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系,因此大部分結(jié)構(gòu)型模式都是對象結(jié)構(gòu)型模式。適配器模式(AdapterPattern):兩個不兼容接口之間適配的橋梁橋接模式(BridgePattern):相同功能抽象化與實現(xiàn)化解耦,抽象與實現(xiàn)可以獨立升級。過濾器模式(Filter、CriteriaPattern):使用不同的標準來過濾一組對象組合模式(CompositePattern):相似對象進行組合,形成樹形結(jié)構(gòu)裝飾器模式(DecoratorPattern):向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu)外觀模式(FacadePattern):向現(xiàn)有的系統(tǒng)添加一個接口,客戶端訪問此接口來隱藏系統(tǒng)的復(fù)雜性。享元模式(FlyweightPattern):嘗試重用現(xiàn)有的同類對象,如果未找到匹配的對象,則創(chuàng)建新對象代理模式(ProxyPattern):一個類代表另一個類的功能適配器模式(AdapterPattern)將一個接口轉(zhuǎn)換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作,適配器模式分為類結(jié)構(gòu)型模式(繼承)和對象結(jié)構(gòu)型模式(組合)兩種,前者(繼承)類之間的耦合度比后者高,且要求程序員了解現(xiàn)有組件庫中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對較少些。適配器模式(Adapter)包含以下主要角色。目標(Target)接口:可以是抽象類或接口??蛻粝M苯佑玫慕涌谶m配者(Adaptee)類:隱藏的轉(zhuǎn)換接口適配器(Adapter)類:它是一個轉(zhuǎn)換器,通過繼承或引用適配者的對象,把適配者接口轉(zhuǎn)換成目標接口。適配器模式(AdapterPattern)適配器模式(AdapterPattern)-應(yīng)用場景什么場景用到?Tomcat如何將Request流轉(zhuǎn)為標準RequestSpringAOP中的AdvisorAdapter是什么SpringMVC中經(jīng)典的HandlerAdapter是什么SpringBoot中WebMvcConfigurerAdapter為什么存在又取消......橋接模式(BridgePattern)將抽象與實現(xiàn)解耦,使兩者都可以獨立變化在現(xiàn)實生活中,某些類具有兩個或多個維度的變化,如圖形既可按形狀分,又可按顏色分。如何設(shè)計類似于Photoshop這樣的軟件,能畫不同形狀和不同顏色的圖形呢?如果用繼承方式,m種形狀和n種顏色的圖形就有m×n種,不但對應(yīng)的子類很多,而且擴展困難。不同顏色和字體的文字、不同品牌和功率的汽車橋接將繼承轉(zhuǎn)為關(guān)聯(lián),降低類之間的耦合度,減少代碼量商品渠道電商專供線下銷售拍照手機拍照、電商拍照、線下性能手機性能、電商性能、線下橋接模式(BridgePattern)橋接(Bridge)模式包含以下主要角色。抽象化(Abstraction)角色:定義抽象類,并包含一個對實現(xiàn)化對象的引用。擴展抽象化(RefinedAbstraction)角色:是抽象化角色的子類,實現(xiàn)父類中的業(yè)務(wù)方法,并通過組合關(guān)系調(diào)用實現(xiàn)化角色中的業(yè)務(wù)方法。實現(xiàn)化(Implementor)角色:定義實現(xiàn)化角色的接口,供擴展抽象化角色調(diào)用。具體實現(xiàn)化(ConcreteImplementor)角色:給出實現(xiàn)化角色接口的具體實現(xiàn)。橋接模式(BridgePattern)-應(yīng)用場景什么場景用到?當一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展時。當一個系統(tǒng)不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加時。當一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性時。組合模式(CompositePattern)把一組相似的對象當作一個單一的對象。如:樹形菜單組合模式(CompositePattern)-應(yīng)用場景什么場景用到?層級結(jié)構(gòu)部門組織結(jié)構(gòu)組合了別的對象還是組合模式嗎?......裝飾器模式(Decorator/WrapperPattern)向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu)。屬于對象結(jié)構(gòu)型模式。創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。裝飾器模式(Decorator/WrapperPattern)抽象構(gòu)件(Component)角色:定義一個抽象接口以規(guī)范準備接收附加責(zé)任的對象。具體構(gòu)件(ConcreteComponent)角色:實現(xiàn)抽象構(gòu)件,通過裝飾角色為其添加一些職責(zé)。抽象裝飾(Decorator)角色:繼承抽象構(gòu)件,并包含具體構(gòu)件的實例,可以通過其子類擴展具體構(gòu)件的功能。具體裝飾(ConcreteDecorator)角色:實現(xiàn)抽象裝飾的相關(guān)方法,并給具體構(gòu)件對象添加附加的責(zé)任。裝飾器模式(Decorator/WrapperPattern)-應(yīng)用場景什么場景使用?SpringSession中如何進行session與redis關(guān)聯(lián)?HttpRequestWrapperMyBatisPlus提取了QueryWrapper,這是什么?Spring中的BeanWrapper是做什么?SpringWebflux中的WebHandlerDecorator?......外觀模式(FacadePattern)外觀(Facade)模式又叫作門面模式,是一種通過為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式外觀模式(FacadePattern)-應(yīng)用場景什么場景使用?去醫(yī)院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家屬覺得很復(fù)雜,如果有提供接待人員,只讓接待人員來處理,就很方便。以此類比......JAVA的三層開發(fā)模式。分布式系統(tǒng)的網(wǎng)關(guān)Tomcat源碼中的RequestFacade干什么的?......代理模式(ProxyPattern)代理模式(ProxyPattern),給某一個對象提供一個代理,并由代理對象控制對原對象的引用,對象結(jié)構(gòu)型模式。這種也是靜態(tài)代理代理模式包含如下角色:Subject:抽象主體角色(抽象類或接口)Proxy:代理主體角色(代理對象類)RealSubject:真實主體角色(被代理對象類)代理模式(ProxyPattern)JDK動態(tài)代理cglib動態(tài)代理代理模式和裝飾器模式區(qū)別在哪里?代理模式(ProxyPattern)-應(yīng)用場景什么場景用到?MyBatis的mapper到底是什么?怎么生成的?Seata的DataSourceProxy是什么?DruidDataSource存在的Proxy模式......享元模式(FlyweightPattern)享元模式(FlyweightPattern),運用共享技術(shù)有效地支持大量細粒度對象的復(fù)用。系統(tǒng)只使用少量的對象,而這些對象都很相似,狀態(tài)變化很小,可以實現(xiàn)對象的多次復(fù)用。對象結(jié)構(gòu)型在享元模式中可以共享的相同內(nèi)容稱為內(nèi)部狀態(tài)(IntrinsicState),而那些需要外部環(huán)境來設(shè)置的不能共享的內(nèi)容稱為外部狀態(tài)(ExtrinsicState),由于區(qū)分了內(nèi)部狀態(tài)和外部狀態(tài),因此可以通過設(shè)置不同的外部狀態(tài)使得相同的對象可以具有一些不同的特征,而相同的內(nèi)部狀態(tài)是可以共享的。在享元模式中通常會出現(xiàn)工廠模式,需要創(chuàng)建一個享元工廠來負責(zé)維護一個享元池(FlyweightPool)用于存儲具有相同內(nèi)部狀態(tài)的享元對象。享元模式包含如下角色:Flyweight:抽象享元類ConcreteFlyweight:具體享元類UnsharedConcreteFlyweight:非共享具體享元類FlyweightFactory:享元工廠類享元模式(FlyweightPattern)初始化加載很多User對象,形成對象池享元模式(FlyweightPattern)-應(yīng)用場景什么場景用到?典型的代表:數(shù)據(jù)庫連接池所有的池化技術(shù)享元和原型模式有什么區(qū)別?享元是預(yù)先準備好的對象進行復(fù)用,原型沒法確定預(yù)先有哪些......過濾器模式(FilterPattern)使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來。結(jié)合多個標準來獲得單一標準

行為型模式(BehavioralPatterns)模板方法(TemplateMethod)模式策略(Strategy)模式狀態(tài)(State)模式

中介者(Mediator)模式觀察者(Observer)模式備忘錄(Memento)模式解釋器(Interpreter)模式命令(Command)模式迭代器(Iterator)模式訪問者(Visitor)模式職責(zé)鏈(ChainofResponsibility)模式

為什么用行為型模式行為型模式關(guān)注點“怎樣運行對象/類?”所以我們關(guān)注下類/對象的運行時流程控制行為型模式用于描述程序在運行時復(fù)雜的流程控制,描述多個類或?qū)ο笾g怎樣相互協(xié)作共同完成單個對象都無法單獨完成的任務(wù),它涉及算法與對象間職責(zé)的分配。行為型模式分為類行為模式和對象行為模式,前者采用繼承機制來在類間分派行為,后者采用組合或聚合在對象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象行為模式比類行為模式具有更大的靈活性。為什么用行為型模式模板方法(TemplateMethod)模式:父類定義算法骨架,某些實現(xiàn)放在子類策略(Strategy)模式:每種算法獨立封裝,根據(jù)不同情況使用不同算法策略狀態(tài)(State)模式:每種狀態(tài)獨立封裝,不同狀態(tài)內(nèi)部封裝了不同行為命令(Command)模式:將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開職責(zé)鏈(ChainofResponsibility)模式:所有處理者封裝為鏈式結(jié)構(gòu),依次調(diào)用備忘錄(Memento)模式:把核心信息抽取出來,可以進行保存解釋器(Interpreter)模式:定義語法解析規(guī)則觀察者(Observer)模式:維護多個觀察者依賴,狀態(tài)變化通知所有觀察者中介者(Mediator)模式:取消類/對象的直接調(diào)用關(guān)系,使用中介者維護迭代器(Iterator)模式:定義集合數(shù)據(jù)的遍歷規(guī)則訪問者(Visitor)模式:分離對象結(jié)構(gòu),與元素的執(zhí)行算法除了模板方法模式和解釋器模式是類行為型模式,其他的全部屬于對象行為型模式模板方法(TemplateMethod)在模板模式(TemplatePattern)中,一個抽象類公開定義了執(zhí)行它的方法的方式模板。它的子類可以按需要重寫方法實現(xiàn),但調(diào)用將以抽象類中定義的方式進行。模板方法(TemplateMethod)包含兩個角色抽象類/抽象模板(AbstractClass)具體子類/具體實現(xiàn)(ConcreteClass)模板方法(TemplateMethod)-應(yīng)用場景什么場景用到?Spring的整個繼承體系都基本用到模板方法JdbcTemplate、RedisTemplate都允許我們再擴展.....我們自己的系統(tǒng)也應(yīng)該使用模板方法組織類結(jié)構(gòu)......策略(Strategy)模式策略(Strategy)模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。屬于對象行為模式。策略模式的主要角色如下。抽象策略(Strategy)類:公共接口,各種不同的算法以不同的方式實現(xiàn)這個接口,環(huán)境角色使用這個接口調(diào)用不同的算法,一般使用接口或抽象類實現(xiàn)。具體策略(ConcreteStrategy)類:實現(xiàn)了抽象策略定義的接口,提供具體的算法實現(xiàn)。環(huán)境(Context)類:持有一個策略類的引用,最終給客戶端調(diào)用。策略(Strategy)模式-應(yīng)用場景什么場景用到?使用策略模式可以避免使用多重條件語句,如if...else語句、switch...case語句什么是Spring的InstantiationStrategy線程池拒絕策略......狀態(tài)(State)模式狀態(tài)(State)模式:對有狀態(tài)的對象,把復(fù)雜的“判斷邏輯”提取到不同的狀態(tài)對象中,允許狀態(tài)對象在其內(nèi)部狀態(tài)發(fā)生改變時改變其行為。狀態(tài)模式包含以下主要角色。環(huán)境類(Context)角色:也稱為上下文,它定義了客戶端需要的接口,內(nèi)部維護一個當前狀態(tài),并負責(zé)具體狀態(tài)的切換。抽象狀態(tài)(State)角色:定義一個接口,用以封裝環(huán)境對象中的特定狀態(tài)所對應(yīng)的行為,可以有一個或多個行為。具體狀態(tài)(ConcreteState)角色:實現(xiàn)抽象狀態(tài)所對應(yīng)的行為,并且在需要的情況下進行狀態(tài)切換。狀態(tài)(State)模式-應(yīng)用場景什么場景用到?策略模式和狀態(tài)模式是一樣的?狀態(tài)模式更關(guān)注做什么,策略模式更關(guān)注怎么做流程框架與狀態(tài)機......中介者(Mediator)模式中介者(Mediator)模式中介者模式(MediatorPattern):用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,減少對象間混亂的依賴關(guān)系,從而使其耦合松散,而且可以獨立地改變它們之間的交互。對象行為型模式。Mediator:抽象中介者ConcreteMediator:具體中介者Colleague:抽象同事類ConcreteColleague:具體同事類中介者(Mediator)模式-應(yīng)用場景什么場景用到?SpringMVC的DispatcherServlet是一個中介者,他會提取Controller、Model、View來進行調(diào)用。而無需controller直接調(diào)用view之類的渲染方法分布式系統(tǒng)中的網(wǎng)關(guān)迪米特法則的一個典型應(yīng)用.......觀察者(Observer)模式觀察者模式(ObserverPattern):定義對象間的一種一對多依賴關(guān)系,使得每當一個對象狀態(tài)發(fā)生改變時,其相關(guān)依賴對象皆得到通知并被自動更新。觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽器(Source/Listener)模式或從屬者(Dependents)模式。對象行為型模式Subject:目標ConcreteSubject:具體目標Observer:觀察者ConcreteObserver:具體觀察者觀察者(Observer)模式-應(yīng)用場景什么場景用到?Spring事件機制如何實現(xiàn)?Vue的雙向綁定核心響應(yīng)式編程核心思想......備忘錄(Memento)模式備忘錄(Memento)模式:在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),以便以后當需要時能將該對象恢復(fù)到原先保存的狀態(tài)。該模式又叫快照模式。對象行為型模式發(fā)起人(Originator)角色:記錄當前時刻的內(nèi)部狀態(tài)信息,提供創(chuàng)建備忘錄和恢復(fù)備忘錄數(shù)據(jù)的功能,實現(xiàn)其他業(yè)務(wù)功能,它可以訪問備忘錄里的所有信息。備忘錄(Memento)角色:負責(zé)存儲發(fā)起人的內(nèi)部狀態(tài),在需要的時候提供這些內(nèi)部狀態(tài)給發(fā)起人。管理者(Caretaker)角色:對備忘錄進行管理,提供保存與獲取備忘錄的功能,但其不能對備忘錄的內(nèi)容進行訪問與修改。備忘錄(Memento)模式-應(yīng)用場景什么場景用到?游戲存檔數(shù)據(jù)庫保存點事務(wù)(savepoint)session活化鈍化......解釋器(Interpreter)模式解釋器(Interpreter)模式:給分析對象定義一個語言,并定義該語言的文法表示,再設(shè)計一個解析器來解釋語言中的句子。也就是說,用編譯語言的方式來分析應(yīng)用中的實例。這種模式實現(xiàn)了文法表達式處理的接口,該接口解釋一個特定的上下文。類行為型模式抽象表達式(AbstractExpression)角色:定義解釋器的接口,約定解釋器的解釋操作,主要包含解釋方法interpret()。終結(jié)符表達式(TerminalExpression)角色:是抽象表達式的子類,用來實現(xiàn)文法中與終結(jié)符相關(guān)的操作,文法中的每一個終結(jié)符都有一個具體終結(jié)表達式與之相對應(yīng)。非終結(jié)符表達式(NonterminalExpression)角色:也是抽象表達式的子類,用來實現(xiàn)文法中與非終結(jié)符相關(guān)的操作,文法中的每條規(guī)則都對應(yīng)于一個非終結(jié)符表達式。環(huán)境(Context)角色:通常包含各個解釋器需要的數(shù)據(jù)或是公共的功能,一般用來傳遞被所有解釋器共享的數(shù)據(jù),后面的解釋器可以從這里獲取這些值。客戶端(Client):主要任務(wù)是將需要分析的句子或表達式轉(zhuǎn)換成使用解釋器對象描述的抽象語法樹,然后調(diào)用解釋器的解釋方法,當然也可以通過環(huán)境角色間接訪問解釋器的解釋方法。解釋器(Interpreter)模式解釋器(Interpreter)模式-應(yīng)用場景什么場景用到?Spring的表達式解析:#{}Thymeleaf等模板引擎的語法解析編譯原理......命令(Command)模式命令(Command)模式:將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行儲存、傳遞、調(diào)用、增加與管理。命令模式包含以下主要角色。抽象命令類(Command)角色:聲明執(zhí)行命令的接口,擁有執(zhí)行命令的抽象方法execute()。具體命令類(ConcreteCommand)角色:是抽象命令類的具體實現(xiàn)類,它擁有接收者對象,并通過調(diào)用接收者的功能來完成命令要執(zhí)行的操作。實現(xiàn)者/接收者(Receiver)角色:執(zhí)行命令功能的相關(guān)操作,是具體命令對象業(yè)務(wù)的真正實現(xiàn)者。調(diào)用者/請求者(Invoker)角色:是請求的發(fā)送者,它通常擁有很多的命令對象,并通過訪問命令對象來執(zhí)行相關(guān)請求,它不直接訪問接收者。命令(Command)模式命令(Command)模式-應(yīng)用場景什么場景用到?mvc就是典型的命令模式當系統(tǒng)需要執(zhí)行一組操作時,命令模式可以定義宏命令(一個命令組合了多個命令)來實現(xiàn)該功能。結(jié)合備忘錄模式還可以實現(xiàn)命令的撤銷和恢復(fù)......迭代器(Iterator)模式迭代器(Iterator)模式:提供一個對象(迭代器)來順序訪問聚合對象(迭代數(shù)據(jù))中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。對象行為型模式抽象聚合(Aggregate)角色:定義存儲、添加、刪除聚合對象以及創(chuàng)建迭代器對象的接口。具體聚合(ConcreteAggregate)角色:實現(xiàn)抽象聚合類,返回一個具體迭代器的實例。抽象迭代器(Iterator)角色:定義訪問和遍歷聚合元素的接口,通常包含hasNext()、first()、next(

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論