




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、電子科技大學(xué)電子科技大學(xué) 計算機學(xué)院計算機學(xué)院. .軟件學(xué)院軟件學(xué)院1TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結(jié)構(gòu)型模式結(jié)構(gòu)型模式q代表相關(guān)對象的集合,代表相關(guān)對象的集合,q如何正確地組合類或?qū)ο笕绾握_地組合類或?qū)ο髇行為型模式行為型模式q在對象集合中捕獲行為,在對象集合中捕獲行為,q解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題2TP-154n有助于我們設(shè)計包含對象集的應(yīng)用程序,從單有助于我們設(shè)計包含對象集的應(yīng)用程序,從單一的代碼中創(chuàng)建幾個可能的集合一的代碼中創(chuàng)建幾個可能的集合q運行時可以創(chuàng)建集合的
2、多個版本運行時可以創(chuàng)建集合的多個版本q約束創(chuàng)建的對象:比如確保類只有一個實例約束創(chuàng)建的對象:比如確保類只有一個實例nFactory nAbstract Factory nPrototype nSingleton n3TP-154在運行時以靈活的方法創(chuàng)建對象,這些對象是構(gòu)造在運行時以靈活的方法創(chuàng)建對象,這些對象是構(gòu)造方法不能單獨提供的方法不能單獨提供的Factory的目標(biāo)是處理簡單的創(chuàng)建性情況;的目標(biāo)是處理簡單的創(chuàng)建性情況;Use methods to return required objects.通過通過使用返回對象的方法使用返回對象的方法來創(chuàng)建希望的對象來創(chuàng)建希望的對象客戶類和工廠類分開。
3、消費者任何時候需要某客戶類和工廠類分開。消費者任何時候需要某種產(chǎn)品,只需向工廠請求即可。種產(chǎn)品,只需向工廠請求即可。Factory設(shè)計模式設(shè)計模式4TP-154Factory design patternMyClass createObjectOfRequiredClass(): RequiredClass create objectRequiredClassClientRequiredClass類和類和MyClass類可以是同一類或同種類類可以是同一類或同種類MyClass類可以擁有一個靜態(tài)工廠方式創(chuàng)建自身的一個實例類可以擁有一個靜態(tài)工廠方式創(chuàng)建自身的一個實例5TP-154Applicati
4、onof FactorydesignpatternBMW createAutomobile()BYD createAutomobile()Automobile createAutomobile(): AutomobileClientcreate objectcreate object運行時,通過方法返回運行時,通過方法返回一個新的所需對象!一個新的所需對象!6TP-154createObjectOfRequiredClass():MyClass:ClientRequiredClass():RequiredClass7TP-154從一個單一的控制代碼版本中,產(chǎn)生一個適合各種用戶的從一個單一的控制
5、代碼版本中,產(chǎn)生一個適合各種用戶的郵件信息郵件信息USE CASE: 詢問顧客類型;用戶選擇類型;程序向控制臺回詢問顧客類型;用戶選擇類型;程序向控制臺回送顧客類型,打印送顧客類型,打印Email信息信息8TP-154p通過分離代碼段,程序適用于所有顧客類型;通過分離代碼段,程序適用于所有顧客類型;p可以更容易地檢查設(shè)計的正確性和重用部分!可以更容易地檢查設(shè)計的正確性和重用部分!9TP-154Application of Factory design patternCustomer getMessage()ClientsendMessage()Frequent getMessage()Retu
6、rning getMessage()Curious getMessage()Newbie getMessage()MailMessagetextMailGenerationApplicationgetCustomerTypeFromUser()setup10TP-154n當(dāng)單獨使用構(gòu)造方法不適用于對象的創(chuàng)建時,當(dāng)單獨使用構(gòu)造方法不適用于對象的創(chuàng)建時,就使用返回對象的方法就使用返回對象的方法nFactory是是DP的委托形式,每個工廠方法都是的委托形式,每個工廠方法都是將創(chuàng)建責(zé)任委托給構(gòu)造方法將創(chuàng)建責(zé)任委托給構(gòu)造方法n工廠模式通過確保創(chuàng)建的類服從于某種約束,工廠模式通過確保創(chuàng)建的類服從于某種約束
7、,從而增強了程序的健壯性。從而增強了程序的健壯性。11TP-154提供一個創(chuàng)建互相關(guān)聯(lián)對象的族或者相互依賴對象提供一個創(chuàng)建互相關(guān)聯(lián)對象的族或者相互依賴對象的接口;不指明它們的具體類。的接口;不指明它們的具體類。族或者風(fēng)格,族或者風(fēng)格,Style?Abstract Factory Design PatternAgain設(shè)計一個應(yīng)用程序,在這個應(yīng)用程序中,有幾種可設(shè)計一個應(yīng)用程序,在這個應(yīng)用程序中,有幾種可能的對象集合風(fēng)格,使用協(xié)同的工廠方法捕獲這些能的對象集合風(fēng)格,使用協(xié)同的工廠方法捕獲這些風(fēng)格!風(fēng)格!12TP-154StylegetComponentA()getComponentB()Clie
8、ntdoOperation( Style myStyle )Style1getComponentA()getComponentB()Style2getComponentA()getComponentB()ComponentA ComponentBStyle1ComponentAStyle1ComponentBStyle2ComponentAStyle2ComponentBCollection13TP-154KitchenStylegetWallCabinet()getFloorCabinet()KitchengetWallCabinet()getFloorcabinet()Clientrend
9、erKitchen( KitchenStyle )ModernKStylegetWallCabinet()getFloorCabinet()AntiqueKStylegetWallCabinet()getFloorCabinet()WallCabinet FloorCabinet ModernWallCabinetModernFloorCabinetAntiqueWallCabinetAntiqueFloorCabinet14TP-154- Enter title:My Life- Enter Heading or “-done”:Birth- Enter text:I was born in
10、 a small mountain hut .- Enter Heading or “-done”:Youth- Enter text:I grew up playing in the woods - Enter Heading or “-done”: Adulthood. - Enter Heading or “-done”: -done(continued)15TP-154. Enter the style you want displayed:big- TITLE: MY LIFE -SECTION 1. - BIRTH - I WAS BORN IN A MOUNTAIN HUT .S
11、ECTION 2. - YOUTH -I GREW UP STURDY SECTION 3. - ADULTHOOD - . Enter the style you want displayed:smallmy lifebirthi was born in a mountain hut .youthi grew up sturdy adulthoodOption 2Option 116TP-154Abstract Factory*Style.ClientStyleAFactoryStyleBFactoryEnsemblesetAbstractFactory()doAFunction()Abst
12、ractFactorygetAPart1Object()getAPart2Object()* relationships within pattern application not shown集合體:客戶代碼可以訪問的使用風(fēng)集合體:客戶代碼可以訪問的使用風(fēng)格構(gòu)造的實體格構(gòu)造的實體17TP-154Application of Abstract FactoryClientSmallStyleLargeStyleStyleDocumentsetStyle()display(). . . . . . .1集合體集合體Ensemble角色角色18TP-154風(fēng)格的確定依賴于用戶輸入風(fēng)格的確定依賴于用戶
13、輸入19TP-154nMain(), get Title, Heading, Text from users input;nCreate Document Object-documentnStyle SelectionnSet Parameters to document.nInteracting with the Object.nMaybe: document.display()20TP-154DocumentgetAHeading()getATitle()getDocumentFromUser()createSmallStylegetAHeading()getATitle()LargeSt
14、ylegetAHeading()getATitle()TitlevalueHeadingvalueLargeHeadingdisplay()SmallHeadingdisplay()LargeTitledisplay()SmallTitledisplay()Textvalue10.n0.nStylegetAHeading()getATitle()DisplayableDisplayabledisplay()ClientgetStyleFromUser()displayDocument()style21TP-154Style.AbstractFactorygetAPart1Object()get
15、APart2Object()StyleAFactoryStyleBFactoryabstractFactory1EnsemblesetStyleA() setStyleB()Client. . . .22TP-154nFactory:客戶類和工廠類分開??蛻糁恍柘颍嚎蛻纛惡凸S類分開??蛻糁恍柘蚬S請求即可。消費者無須修改就可以接納新工廠請求即可。消費者無須修改就可以接納新產(chǎn)品。缺點是當(dāng)產(chǎn)品修改時,工廠類也要做相產(chǎn)品。缺點是當(dāng)產(chǎn)品修改時,工廠類也要做相應(yīng)的修改。如:如何創(chuàng)建及如何向客戶端提供應(yīng)的修改。如:如何創(chuàng)建及如何向客戶端提供nAbstract Factory:核心工廠類不再負(fù)責(zé)所有產(chǎn)核心
16、工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負(fù)責(zé)給出具體做,成為一個抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實現(xiàn)的接口工廠類必須實現(xiàn)的接口23TP-154- when a class has exactly one instance.24TP-154單例設(shè)計模式單例設(shè)計模式確保只有一個類的實例確保只有一個類的實例在應(yīng)用程序的任何地方都可獲得此實例在應(yīng)用程序的任何地方都可獲得此實例Design Pattern Summary使類的構(gòu)造方法私有化;使類的構(gòu)造方法私有化;定義一個類型為此類的私有靜態(tài)屬性;定義一個類型為
17、此類的私有靜態(tài)屬性;定義一個公有的存取方法。定義一個公有的存取方法。Singleton25TP-154Singleton Design PatternMyClass getSingletonOfMyClass(): MyClass Client1singletonOfMyClassstatic26TP-154The Singleton Design Pattern - applied to MyClass1.定義一個私有的、靜態(tài)的、不變的定義一個私有的、靜態(tài)的、不變的MyClass類的成類的成員變量員變量private static MyClass singletonOfMyClass = n
18、ew MyClass(); 2.使使MyClass 類的構(gòu)造方法類的構(gòu)造方法privateprivate MyClass() /* . constructor code . */ ;3.Define a public static method to access the memberpublic static MyClass getSingletonOfMyClass() return singletonOfMyClass;27TP-154Runtime getSingletonRuntime(): Runtime ClientSingletonRuntime1static每個每個JAVA程
19、序都有一個單一的程序都有一個單一的Runtime實例實例-Singleton類類這個實例允許應(yīng)用程序在運行環(huán)境相互聯(lián)系這個實例允許應(yīng)用程序在運行環(huán)境相互聯(lián)系可以通過可以通過getRuntime()方法獲取當(dāng)前的方法獲取當(dāng)前的Runtime實例實例28TP-154只有一個單態(tài)對象和這個對象能在應(yīng)用程只有一個單態(tài)對象和這個對象能在應(yīng)用程序中任何地方被訪問都很重要!序中任何地方被訪問都很重要!想想游戲中的玩家想想游戲中的玩家PlayerPlayer類的設(shè)計(共同類的設(shè)計(共同存取的一致性)存取的一致性)29TP-154創(chuàng)建一系列幾乎相同的對象,其類型在運創(chuàng)建一系列幾乎相同的對象,其類型在運行時確定行
20、時確定假定原型實例已知,當(dāng)需要一個新的實例假定原型實例已知,當(dāng)需要一個新的實例時,克隆此原型時,克隆此原型運用于運用于多實例設(shè)計多實例設(shè)計,使用原型克隆產(chǎn)生關(guān),使用原型克隆產(chǎn)生關(guān)鍵特征相同的多個實例鍵特征相同的多個實例30TP-154Graphics courtesy CORELClick on choice of storage:Click on choice of chair:Click on choice of desk:Furniture colorFurniture hardware typecolonial并非選擇統(tǒng)一的辦公并非選擇統(tǒng)一的辦公室風(fēng)格室風(fēng)格抽象工廠抽象工廠每個組件都可
21、選,獨每個組件都可選,獨立。立。31TP-154A Simplified Prototype Example Another Choice 32TP-154nAbstract Factory:一種整體的辦公室風(fēng)格!:一種整體的辦公室風(fēng)格!q協(xié)調(diào)和匹配靈活性不夠,仍然需要協(xié)調(diào)和匹配靈活性不夠,仍然需要q對于單個的桌子或椅子有多種風(fēng)格的處理對于單個的桌子或椅子有多種風(fēng)格的處理nPrototype:希望能夠分別選擇任意的桌子風(fēng):希望能夠分別選擇任意的桌子風(fēng)格、椅子風(fēng)格和柜子風(fēng)格格、椅子風(fēng)格和柜子風(fēng)格q可以在一種或者另一種可以在一種或者另一種style中創(chuàng)建復(fù)雜對象中創(chuàng)建復(fù)雜對象33TP-154Ens
22、emblecreateEnsemble()ClientPart1clone()Part2clone()(optional part of interface)Case:OfficeSuitecreateOfficeSuite(Desk aDesk, Chair aChair, Storage aStorage);Create方法處理通用類,而不是具體對象;方法處理通用類,而不是具體對象;34TP-154Prototype Design PatternEnsemblecreateEnsemble()ClientMyPartclone(): MyPartMyPartStyleAclone()MyP
23、artStyleBclone()myPartPrototype1/ To create a MyPart instance:MyPart p = myPartPrototype.clone();35TP-154EnsemblecreateEnsemble()ClientPart1clone()Part2clone()Part1StyleAclone()Part1StyleBclone()Part2StyleAclone()Part2StyleBclone()part1Prototypepart2Prototype11./ To create a Part1 object:Part1 p1 =
24、part1Prototype.clone();.Part1StyleB returnObject = new Part1StyleB();.Part1StyleCclone()36TP-15437TP-154OfficeProcessdoAProcess()HiVolCustomer clone()LoVolCustomerclone()Customerclone(): CustomercustomerPrototypeClient1MedVolCustomerclone()運行時創(chuàng)建的靜態(tài)運行時創(chuàng)建的靜態(tài)Customer對象對象.不同不同 類型類型Customer容易的增刪改以適應(yīng)需求變化!
25、容易的增刪改以適應(yīng)需求變化!38TP-154n通過給出一個原型對象來指明所要創(chuàng)建的對象通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復(fù)制這個原型對象的方法創(chuàng)建的類型,然后用復(fù)制這個原型對象的方法創(chuàng)建出更多同類型的對象。原始模型模式允許動態(tài)出更多同類型的對象。原始模型模式允許動態(tài)的增加或減少產(chǎn)品類。的增加或減少產(chǎn)品類。n缺點是每一個類都必須配備一個克隆方法。缺點是每一個類都必須配備一個克隆方法。39TP-154Use Creational Design Patterns when creating complex objectsnFactory when creating individ
26、ualsnAbstract Factory when creating familiesnPrototype to “mix & match”nSingleton for exactly one, safely40TP-15441TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結(jié)構(gòu)型模式結(jié)構(gòu)型模式q代表相關(guān)對象的集合,代表相關(guān)對象的集合,q如何正確地組合類或?qū)ο笕绾握_地組合類或?qū)ο髇行為型模式行為型模式q在對象集合中捕獲行為,在對象集合中捕獲行為,q解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題42T
27、P-154nFacade nDecorator nComposite nAdapter nFlyweight nProxy 43TP-154門面型設(shè)計模式門面型設(shè)計模式Provide an interface to a package of classes為子系統(tǒng)中的一組接口提供一個一致的界面,為子系統(tǒng)中的一組接口提供一個一致的界面, FacadeFacade模式定義了一個高層接口,這個接口使得這模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。一子系統(tǒng)更加容易使用。* *為類包提供接口為類包提供接口Faade對象通常是對象通常是SingletonSingleton模式模式Facad
28、eNotes: the classes need not be organized as a package; more than one class may be used for the faade.44TP-154Cnot exposedmyCMethod() FaadeexposedcMethodOfFacade()Client12Client不能直接引用不能直接引用C調(diào)用由調(diào)用由1和和2替代替代45TP-154nFacade類向公眾開放,通常是單一類向公眾開放,通常是單一Singletonn隱藏包中其他所有類隱藏包中其他所有類nFacade類調(diào)節(jié)與包中所有其他對象的通信類調(diào)節(jié)與包中所
29、有其他對象的通信n可以方便的組織開發(fā),內(nèi)部開發(fā)對可以方便的組織開發(fā),內(nèi)部開發(fā)對Client端的端的屏蔽屏蔽n只有一個類提供對一個類集的功能性訪問,降只有一個類提供對一個類集的功能性訪問,降低開發(fā)復(fù)雜性!低開發(fā)復(fù)雜性!46TP-154MyGameCharactersMyGameEngineMyGameCastfacadeMyGamefacadeMyGameEnvironmentMyGameEnvironmentfacade47TP-154bankCustomersClientmain() facadeBankCustomersdoDeposit( int amt, Customer cust,
30、Account acc )getBankAccount( Customer cust, int accNum )getBankCustomer( String custName )introduceApplication()BankCustomerBankAccountCustomergetCustomerName()getNumAccounts()getPersonalNote()getAccount( int )AccountgetAccountNum()deposit( int )getBalance()1.nIntroMessageframeworkAccountExceptionCu
31、stomerException48TP-154- modularizes designs by hiding complexity -隱藏復(fù)雜性的組件化設(shè)計隱藏復(fù)雜性的組件化設(shè)計-外部與一個子系統(tǒng)的通信必須通過一個外部與一個子系統(tǒng)的通信必須通過一個統(tǒng)一的門面對象進行。門面模式提供一統(tǒng)一的門面對象進行。門面模式提供一個高層次的接口,使得子系統(tǒng)更易于使個高層次的接口,使得子系統(tǒng)更易于使用。每個子系統(tǒng)只有一個門面類,而且用。每個子系統(tǒng)只有一個門面類,而且此門面類只有一個實例。但整個系統(tǒng)可此門面類只有一個實例。但整個系統(tǒng)可以有多個門面類。以有多個門面類。49TP-154裝飾設(shè)計模式裝飾設(shè)計模式Add
32、responsibilities to an object at runtime.運行時負(fù)責(zé)添加或刪除類運行時負(fù)責(zé)添加或刪除類以對客戶端透明的方式擴展對象的功能,是繼承以對客戶端透明的方式擴展對象的功能,是繼承關(guān)系的一個替代方案,提供比繼承更多的靈活性。關(guān)系的一個替代方案,提供比繼承更多的靈活性。動態(tài)給一個對象增加動態(tài)給一個對象增加/ /刪除功能,增加由一些基刪除功能,增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。本功能的排列組合而產(chǎn)生的非常大量的功能。Decorator50TP-154n抽象組件(抽象組件(Component)給出一個抽象接口,給出一個抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的
33、對象以規(guī)范準(zhǔn)備接收附加責(zé)任的對象n具體組件(具體組件(Substance)定義一個將要添加附定義一個將要添加附加責(zé)任的類加責(zé)任的類n裝飾組件(裝飾組件(Decorator)負(fù)責(zé)給具體組件對象負(fù)責(zé)給具體組件對象添加附加的責(zé)任(功能)添加附加的責(zé)任(功能) 51TP-154ClientobjDecoratedDecorationdoAction()1SubstancedoAction()Componentadd( Component )doAction()void doAction() . / do actions special to this decoration objDecorated.d
34、oAction(); / pass along 具體組件抽象組件裝飾組件52TP-154n顧客可以開設(shè)不同類型的賬戶顧客可以開設(shè)不同類型的賬戶n應(yīng)用程序列出可用的賬戶類型,客戶選擇應(yīng)用程序列出可用的賬戶類型,客戶選擇n重復(fù)過程,直至用戶退出重復(fù)過程,直至用戶退出53TP-154ClientnextComponentAccountdescribe()1Customerdescribe()BankingComponentadd( Component )describe()CheckAccountdescribe()getLastCheckNum(): intSavingsAccountdescri
35、be()getInterestRate(): intCDAccountdescribe()getDuration(): intSetupAttemptToAddBadBankingComponentException靈活性:運行時創(chuàng)建或刪除顧客的賬戶靈活性:運行時創(chuàng)建或刪除顧客的賬戶具體組件修飾過程54TP-154- allows addition to and removal from objects at runtime - 動態(tài)地給對象添加或刪除一些額外動態(tài)地給對象添加或刪除一些額外的功能的功能55TP-154合成設(shè)計模式合成設(shè)計模式Represent a Tree of Objects
36、Design Pattern Summary合成模式將對象組織到樹結(jié)構(gòu)中,可以合成模式將對象組織到樹結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系。用來描述整體與部分的關(guān)系。Composite56TP-154NonLeafNodeComponent“包含的每個對象包含的每個對象都是都是 Component對象對象”“非葉節(jié)點有一個或非葉節(jié)點有一個或更多的組件更多的組件”leaf nodenon-leaf nodeObjectsClasses1.n57TP-154NonLeafNodedoIt()ponentComponentadd( Component )doIt()LeafNodedoIt()Type
37、ANonLeafNodedoIt()TypeBNonLeafNodedoIt()1.nClient非葉節(jié)點:驅(qū)動每個聚合對象非葉節(jié)點:驅(qū)動每個聚合對象執(zhí)行執(zhí)行 e.doIt()唯一接口唯一接口58TP-154:LeafNodenonLeaf1ChildX:NonLeafNodenonLeaf1ChildX:NonLeafNodeSequence Diagram for Composite:ClientdoIt()nonLeaf1:NonLeafNodedoIt()doIt()nonLeaf1ChildX:NonLeafNode:LeafNode:LeafNode59TP-154Pete:Pre
38、sidentAble:ManagerBecky:ManagerLonny:TellerCal:ClerkTina:TellerThelma:Teller60TP-154ClientreportsSupervisoradd(Employee)EmployeestateName()1.nSetupClerkstateName()PresidentstateName()TellerstateName()ManagerstateName()61TP-154ComponentContainerWindow . .component1.nCanvas62TP-154Component0nchildren6
39、3TP-154- used to represent trees of objects.-合成模式用于處理對象的樹結(jié)構(gòu)。合成模式用于處理對象的樹結(jié)構(gòu)。64TP-154適配器設(shè)計模式適配器設(shè)計模式Allow an application to use external functionality in a retargetable manner.將一個類的接口轉(zhuǎn)換成客戶希望的另外一個將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。接口。AdapterAdapter模式使得原本由于接口不兼模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。容而不能一起工作的那些類可以一起工作。重定向:允許應(yīng)
40、用程序以重定位方式訪問外重定向:允許應(yīng)用程序以重定位方式訪問外部功能;部功能;Adapter65TP-154ClientAbstractClassclientNameForRequiredMethod()AdapterclientNameForRequiredMethod() adaptee. requiredMethod();adapteeRequiredClassrequiredMethod()66TP-154Sequence Diagram for Adapter:ClientclientNameForRequiredMethod():AbstractClass:AdapterRequi
41、redMethod()adaptee:RequiredClass67TP-154Financialamount()PrinciplecomputeValue()Client原有系統(tǒng)Adaptation 適配過程應(yīng)用FinancialAdapteramount()legacyAdapteelegacyAputeValue(); FinancialAdapter繼承了繼承了Finacial,聚合了原有,聚合了原有Principal類類68TP-154ClientAbstractClassstandinForRequiredMethod()AdapterstandinForRequiredMetho
42、d() requiredMethod();RequiredClassrequiredMethod()69TP-154- to interface flexibly with external functionality.-靈活地與外部功能相關(guān)聯(lián);靈活地與外部功能相關(guān)聯(lián);-維護的價值,不必修改多處代碼;維護的價值,不必修改多處代碼; 70TP-154享元設(shè)計模式享元設(shè)計模式Manage a large number of objects without constructing them all.管理大量極為相似的類;管理大量極為相似的類;運用共享技術(shù)有效的支持大量細(xì)粒度的對象,即運用共享技術(shù)有
43、效的支持大量細(xì)粒度的對象,即在一個系統(tǒng)中如果有多個相同的對象,那么只共在一個系統(tǒng)中如果有多個相同的對象,那么只共享一份就可以了,不必為每一次出現(xiàn)都單獨創(chuàng)建享一份就可以了,不必為每一次出現(xiàn)都單獨創(chuàng)建一個對象。一個對象。_ _節(jié)省空間資源,改善系統(tǒng)性能節(jié)省空間資源,改善系統(tǒng)性能Flyweight71TP-154FlyweightFlyweightdoAction(Context)ConcreteFlyweightdoAction(Context)FlyweightFactorygetFlyweight(Characteristic)Client1.n享元模式需要維護一個記錄所有享元的哈希表-對象池
44、,也需耗費一定的資源72TP-15473TP-154Flyweights (1 each)Line for outputUse string to determine which flyweight . Use color information to form the context (parameter value).Make (shared) BigA, BigB, flyweight object available to clientsClient ResponsibilitiesDP Responsibilitiesvvvvvv v-red-vvvvvvv. . . . . .bi
45、gA:BigAbigB:BigBvvvvvv vblackvvvvvvvgetMatrix( ”red” )getMatrix( “black” )color “RED” begins 0 對象外蘊狀態(tài)(客戶持有)ABBRA CADABBRA 對象的內(nèi)蘊狀態(tài)74TP-154Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.75TP-154Application of FlyweightBigCharconstructionC
46、hargetMatrix( String color )BigCharFactorygetFlyweight( char )PagePrinter26singletonBigBsingletonBigAAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.76TP-154n享元模式在一般的項目開發(fā)中并不常用,而常應(yīng)享元模式在一般的項目開發(fā)中并不常用,而常應(yīng)用于系統(tǒng)底層開發(fā),解決系統(tǒng)性能問題。用于系統(tǒng)底層開發(fā),解決系統(tǒng)性能問題。n
47、Java和和.Net中的中的String類型使用享元模式:如果在類型使用享元模式:如果在Java或者或者.NET中已經(jīng)創(chuàng)建了一個字符串對象中已經(jīng)創(chuàng)建了一個字符串對象s1,那么下次再創(chuàng)建相同的字符串那么下次再創(chuàng)建相同的字符串s2的時候,系統(tǒng)只的時候,系統(tǒng)只是把是把s2的引用指向的引用指向s1所引用的具體對象,實現(xiàn)相所引用的具體對象,實現(xiàn)相同字符串在內(nèi)存中共享。同字符串在內(nèi)存中共享。nEJB采用采用pooling方式管理線程和數(shù)據(jù)庫連接?方式管理線程和數(shù)據(jù)庫連接?77TP-154- to obtain the benefits of a large set of individual object
48、s without efficiency penalties.- - 在不損失效率的前提下獲得大量單個在不損失效率的前提下獲得大量單個對象集合的優(yōu)勢;對象集合的優(yōu)勢; 78TP-154代理設(shè)計模式代理設(shè)計模式Avoid the unnecessary execution of expensive functionality in a manner transparent to clients.以對客戶端透明的方式,避免執(zhí)行不必要并且開以對客戶端透明的方式,避免執(zhí)行不必要并且開銷很大的功能銷很大的功能在開銷較大的功能處插入一個可訪問的類在開銷較大的功能處插入一個可訪問的類代理的理解?代理的理解?
49、Proxy79TP-154AdaptationBaseActiveClassexpensiveMethod()anotherMethod() RealActiveClassexpensiveMethod()anotherMethod() ProxyexpensiveMethod()anotherMethod() Client realActiveObject. . . / One way to check if really needed:if ( realActiveObject = null ) / never referenced realActiveObject = getRealAc
50、tiveObject(); realActiveObject.expensiveMethod(); else / try to avoid calling the real expensiveMethod()使用使用Proxy 對象對象進行實例化進行實例化必要時創(chuàng)建必要時創(chuàng)建80TP-154realExpensiveMethod()Sequence Diagram for Proxy:ClientexpensiveMethod():Proxy:RealActiveClass( if needed: )欺騙性方法欺騙性方法81TP-154- to call expensive or remote
51、 methods.- 可以顯著提高效率可以顯著提高效率 的設(shè)計模式的設(shè)計模式- Internet對象系統(tǒng)的開發(fā)多數(shù)使用對象系統(tǒng)的開發(fā)多數(shù)使用Proxy模式,將本地類指派為代理進行模式,將本地類指派為代理進行遠(yuǎn)程處理遠(yuǎn)程處理82TP-154Structural Design Patterns relate objects (as trees, lists etc.)nFacade :門面模式給對象的集合提供了接口:門面模式給對象的集合提供了接口nDecorator 裝飾模式在運行時增加對象,動態(tài)修飾裝飾模式在運行時增加對象,動態(tài)修飾nComposite 合成模式表示對象的樹型結(jié)構(gòu)合成模式表示對象
52、的樹型結(jié)構(gòu)nAdapter 適配器模式簡化外部功能的使用適配器模式簡化外部功能的使用nFlyweight 享元模式通過使用多重實例來最小化空間消耗享元模式通過使用多重實例來最小化空間消耗nProxy 代理模式代理模式 避免不必要的調(diào)用大開銷操作避免不必要的調(diào)用大開銷操作83TP-154電子科技大學(xué)電子科技大學(xué) 計算機學(xué)院計算機學(xué)院. .軟件學(xué)院軟件學(xué)院84TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結(jié)構(gòu)型模式結(jié)構(gòu)型模式q代表相關(guān)對象的集合,代表相關(guān)對象的集合,q如何正確地組合類或?qū)ο笕绾握_地組合類或?qū)ο髇行為型模式行為型模式q在對象集合中捕獲行為
53、,在對象集合中捕獲行為,q解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題解決類或?qū)ο笾g如何交互和如何分配職責(zé)的問題85TP-154nInterpreternIteratornMediatornObservernStatenChain of ResponsibilitynCommandnTemplate86TP-154RequirementsAnalysisDesignImplementationArchitectureFrameworkDetailed DesignxKey:= secondary emphasisx = main emphasis87TP-154停泊停泊to 碼頭 obsta
54、cles88TP-154Customs應(yīng)用應(yīng)用: 可單獨重用可單獨重用 Ship ShipWorkmanShipTugboat1.n1港口應(yīng)用港口應(yīng)用目標(biāo):重用性目標(biāo):重用性*希望在其他應(yīng)用中能分希望在其他應(yīng)用中能分別使用別使用Ship和和Tugboat類類89TP-154ShipTugboatLeavingPortestimateTime()*控制著控制著Ship和和Tugboat類類的對象行為如何來為整個的對象行為如何來為整個過程計算時間。過程計算時間。EnteringPortestimateTime()BeingMaintainedestimateTime()90TP-154重用的實現(xiàn)重
55、用的實現(xiàn)ShipTugboatVesselPortMissionestimateTime()LeavingPortestimateTime()EnteringPortestimateTime()BeingMaintainedestimateTime()Mediator base class91TP-154p捕捉對象中的行為,包裝了一系列對象相捕捉對象中的行為,包裝了一系列對象相互作用的方式互作用的方式p在對象中封裝行為在對象中封裝行為 ,使得這些對象不必相,使得這些對象不必相互明顯作用?;ッ黠@作用。p將對象的行為和協(xié)作抽象化將對象的行為和協(xié)作抽象化92TP-154解釋器設(shè)計模式解釋器設(shè)計模式分
56、析表達(dá)式分析表達(dá)式, 應(yīng)用程序處理表達(dá)式的語法問題應(yīng)用程序處理表達(dá)式的語法問題使用一個遞歸的設(shè)計模式形式表使用一個遞歸的設(shè)計模式形式表示語法;示語法;將解釋傳遞到聚合對象;將解釋傳遞到聚合對象;Interpreter93TP-154n給定一個語言后,解釋器模式可以定義出其文法的一給定一個語言后,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器??蛻舳丝梢允褂眠@種表示,并同時提供一個解釋器??蛻舳丝梢允褂眠@個解釋器來解釋這個語言中的句子。個解釋器來解釋這個語言中的句子。n描述怎樣在有了一個簡單的文法后,使用模式設(shè)計解描述怎樣在有了一個簡單的文法后,使用模式設(shè)計解釋這些語句。所提到的語言
57、是指任何解釋器對象能夠釋這些語句。所提到的語言是指任何解釋器對象能夠解釋的任何組合。解釋的任何組合。n模式中需要定義一個代表文法的命令類的等級結(jié)構(gòu),模式中需要定義一個代表文法的命令類的等級結(jié)構(gòu),也就是一系列的組合規(guī)則。每一個命令對象都有一個也就是一系列的組合規(guī)則。每一個命令對象都有一個解釋方法,代表對命令對象的解釋。解釋方法,代表對命令對象的解釋。XML解析器?解析器?94TP-154AbstractExpressioninterpret()ClientTerminalExpressioninterpret()NonTerminalExpressioninterpret()1.n遞歸分析樹的根
58、節(jié)點遞歸分析樹的根節(jié)點表達(dá)式的復(fù)雜造成表達(dá)式的復(fù)雜造成Interpreter設(shè)計的遞歸形式設(shè)計的遞歸形式95TP-154260Mhz & 64MB 400Mhz & 128MB 260Mhz & 32MB 裝配過程裝配過程 . 網(wǎng)絡(luò)系統(tǒng)的顧客訂單表達(dá):網(wǎng)絡(luò)系統(tǒng)的顧客訂單表達(dá):(260 64) (400 128)(260 32)96TP-15497TP-15498TP-15499TP-154Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003
59、), with permission.100TP-154把網(wǎng)絡(luò)訂單的每部分過程進行分解!把網(wǎng)絡(luò)訂單的每部分過程進行分解!101TP-154Componentassemble()Computerassemble()NetSystemassemble()component1component2RAMdescribe()CPUdescribe()cpuramClientSetupgetInputFromUser()parse()10.1102TP-154- 分析的一種形式和處理表達(dá)式的一種方法分析的一種形式和處理表達(dá)式的一種方法. .103TP-154迭代設(shè)計模式迭代設(shè)計模式提供一種訪問聚合對象的元
60、素并且不暴露其基本表提供一種訪問聚合對象的元素并且不暴露其基本表示的方法示的方法訪問集合中的成員訪問集合中的成員數(shù)組數(shù)組a(i)?向量)?向量elementAt(i)?)?Encapsulate the iteration in a class pointing (in effect) to an element of the aggregate. Iterator104TP-154q- 給定一個對象的集合,給定一個對象的集合,e.g.,qthe videos in a video storeqAggregate objectsq- 用指定的方式處理全部對象用指定的方式處理全部對象 e.g.,q “l(fā)ist in alph
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東交通學(xué)院《金融學(xué)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海南湖職業(yè)技術(shù)學(xué)院《大學(xué)信息技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南中醫(yī)藥大學(xué)《中國建筑史》2023-2024學(xué)年第二學(xué)期期末試卷
- 南方科技大學(xué)《工業(yè)通信與網(wǎng)絡(luò)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北工業(yè)大學(xué)工程技術(shù)學(xué)院《制漿造紙機械與設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江大學(xué)《經(jīng)典本草與湖湘中醫(yī)藥文化》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江幼兒師范高等??茖W(xué)校《兵器美學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都工貿(mào)職業(yè)技術(shù)學(xué)院《設(shè)計與開發(fā)課程設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古經(jīng)貿(mào)外語職業(yè)學(xué)院《地理信息工程課程設(shè)計與實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南交通職業(yè)技術(shù)學(xué)院《空間文學(xué)與敘事》2023-2024學(xué)年第二學(xué)期期末試卷
- 藍(lán)色卡通風(fēng)學(xué)生班干部競選介紹PPT模板課件
- 人教新目標(biāo)英語九年級上冊單詞中文Units
- 機動車牌證申請表格模板(完整版)
- 部編版小學(xué)語文三年級(下冊)學(xué)期課程綱要
- 道路交通事故責(zé)任認(rèn)定行政復(fù)議申請書范例
- 高效液相含量測定計算公式
- 六宮格數(shù)獨解題技巧
- 公安機關(guān)通用告知書模板
- 工程款支付審批流程圖
- 人教版七年級歷史下冊第一單元填空題
- 封頭重量和容積計算
評論
0/150
提交評論