版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、電子科技大學電子科技大學 計算機學院計算機學院. .軟件學院軟件學院1TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結構型模式結構型模式q代表相關對象的集合,代表相關對象的集合,q如何正確地組合類或對象如何正確地組合類或對象n行為型模式行為型模式q在對象集合中捕獲行為,在對象集合中捕獲行為,q解決類或對象之間如何交互和如何分配職責的問題解決類或對象之間如何交互和如何分配職責的問題2TP-154n有助于我們設計包含對象集的應用程序,從單有助于我們設計包含對象集的應用程序,從單一的代碼中創(chuàng)建幾個可能的集合一的代碼中創(chuàng)建幾個可能的集合q運行時可以創(chuàng)建集合的
2、多個版本運行時可以創(chuàng)建集合的多個版本q約束創(chuàng)建的對象:比如確保類只有一個實例約束創(chuàng)建的對象:比如確保類只有一個實例nFactory nAbstract Factory nPrototype nSingleton n3TP-154在運行時以靈活的方法創(chuàng)建對象,這些對象是構造在運行時以靈活的方法創(chuàng)建對象,這些對象是構造方法不能單獨提供的方法不能單獨提供的Factory的目標是處理簡單的創(chuàng)建性情況;的目標是處理簡單的創(chuàng)建性情況;Use methods to return required objects.通過通過使用返回對象的方法使用返回對象的方法來創(chuàng)建希望的對象來創(chuàng)建希望的對象客戶類和工廠類分開。
3、消費者任何時候需要某客戶類和工廠類分開。消費者任何時候需要某種產(chǎn)品,只需向工廠請求即可。種產(chǎn)品,只需向工廠請求即可。Factory設計模式設計模式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可以更容易地檢查設計的正確性和重用部分!可以更容易地檢查設計的正確性和重用部分!9TP-154Application of Factory design patternCustomer getMessage()ClientsendMessage()Frequent getMessage()Retu
6、rning getMessage()Curious getMessage()Newbie getMessage()MailMessagetextMailGenerationApplicationgetCustomerTypeFromUser()setup10TP-154n當單獨使用構造方法不適用于對象的創(chuàng)建時,當單獨使用構造方法不適用于對象的創(chuàng)建時,就使用返回對象的方法就使用返回對象的方法nFactory是是DP的委托形式,每個工廠方法都是的委托形式,每個工廠方法都是將創(chuàng)建責任委托給構造方法將創(chuàng)建責任委托給構造方法n工廠模式通過確保創(chuàng)建的類服從于某種約束,工廠模式通過確保創(chuàng)建的類服從于某種約束
7、,從而增強了程序的健壯性。從而增強了程序的健壯性。11TP-154提供一個創(chuàng)建互相關聯(lián)對象的族或者相互依賴對象提供一個創(chuàng)建互相關聯(lián)對象的族或者相互依賴對象的接口;不指明它們的具體類。的接口;不指明它們的具體類。族或者風格,族或者風格,Style?Abstract Factory Design PatternAgain設計一個應用程序,在這個應用程序中,有幾種可設計一個應用程序,在這個應用程序中,有幾種可能的對象集合風格,使用協(xié)同的工廠方法捕獲這些能的對象集合風格,使用協(xié)同的工廠方法捕獲這些風格!風格!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集合體:客戶代碼可以訪問的使用風集合體:客戶代碼可以訪問的使用風格構造的實體格構造的實體17TP-154Application of Abstract FactoryClientSmallStyleLargeStyleStyleDocumentsetStyle()display(). . . . . . .1集合體集合體Ensemble角色角色18TP-154風格的確定依賴于用戶輸入風格的確定依賴于用戶
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)品。缺點是當產(chǎn)品修改時,工廠類也要做相產(chǎn)品。缺點是當產(chǎn)品修改時,工廠類也要做相應的修改。如:如何創(chuàng)建及如何向客戶端提供應的修改。如:如何創(chuàng)建及如何向客戶端提供nAbstract Factory:核心工廠類不再負責所有產(chǎn)核心
16、工廠類不再負責所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現(xiàn)的接口工廠類必須實現(xiàn)的接口23TP-154- when a class has exactly one instance.24TP-154單例設計模式單例設計模式確保只有一個類的實例確保只有一個類的實例在應用程序的任何地方都可獲得此實例在應用程序的任何地方都可獲得此實例Design Pattern Summary使類的構造方法私有化;使類的構造方法私有化;定義一個類型為此類的私有靜態(tài)屬性;定義一個類型為
17、此類的私有靜態(tài)屬性;定義一個公有的存取方法。定義一個公有的存取方法。Singleton25TP-154Singleton Design PatternMyClass getSingletonOfMyClass(): MyClass Client1singletonOfMyClassstatic26TP-154The Singleton Design Pattern - applied to MyClass定義一個私有的、靜態(tài)的、不變的定義一個私有的、靜態(tài)的、不變的MyClass類的成類的成員變量員變量private static MyClass singletonOfMyClass = new
18、 MyClass(); 使使MyClass 類的構造方法類的構造方法privateprivate MyClass() /* . constructor code . */ ;Define a public static method to access the memberpublic static MyClass getSingletonOfMyClass() return singletonOfMyClass;27TP-154Runtime getSingletonRuntime(): Runtime ClientSingletonRuntime1static每個每個JAVA程序都有一個單
19、一的程序都有一個單一的Runtime實例實例-Singleton類類這個實例允許應用程序在運行環(huán)境相互聯(lián)系這個實例允許應用程序在運行環(huán)境相互聯(lián)系可以通過可以通過getRuntime()方法獲取當前的方法獲取當前的Runtime實例實例28TP-154只有一個單態(tài)對象和這個對象能在應用程只有一個單態(tài)對象和這個對象能在應用程序中任何地方被訪問都很重要!序中任何地方被訪問都很重要!想想游戲中的玩家想想游戲中的玩家PlayerPlayer類的設計(共同類的設計(共同存取的一致性)存取的一致性)29TP-154創(chuàng)建一系列幾乎相同的對象,其類型在運創(chuàng)建一系列幾乎相同的對象,其類型在運行時確定行時確定假定原
20、型實例已知,當需要一個新的實例假定原型實例已知,當需要一個新的實例時,克隆此原型時,克隆此原型運用于運用于多實例設計多實例設計,使用原型克隆產(chǎn)生關,使用原型克隆產(chǎ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)一的辦公室風格室風格抽象工廠抽象工廠每個組件都可選,獨每個組
21、件都可選,獨立。立。31TP-154A Simplified Prototype Example Another Choice 32TP-154nAbstract Factory:一種整體的辦公室風格?。阂环N整體的辦公室風格!q協(xié)調(diào)和匹配靈活性不夠,仍然需要協(xié)調(diào)和匹配靈活性不夠,仍然需要q對于單個的桌子或椅子有多種風格的處理對于單個的桌子或椅子有多種風格的處理nPrototype:希望能夠分別選擇任意的桌子風:希望能夠分別選擇任意的桌子風格、椅子風格和柜子風格格、椅子風格和柜子風格q可以在一種或者另一種可以在一種或者另一種style中創(chuàng)建復雜對象中創(chuàng)建復雜對象33TP-154Ensemblec
22、reateEnsemble()ClientPart1clone()Part2clone()(optional part of interface)Case:OfficeSuitecreateOfficeSuite(Desk aDesk, Chair aChair, Storage aStorage);Create方法處理通用類,而不是具體對象;方法處理通用類,而不是具體對象;34TP-154Prototype Design PatternEnsemblecreateEnsemble()ClientMyPartclone(): MyPartMyPartStyleAclone()MyPartSty
23、leBclone()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 = part1P
24、rototype.clone();.Part1StyleB returnObject = new Part1StyleB();.Part1StyleCclone()36TP-15437TP-154OfficeProcessdoAProcess()HiVolCustomer clone()LoVolCustomerclone()Customerclone(): CustomercustomerPrototypeClient1MedVolCustomerclone()運行時創(chuàng)建的靜態(tài)運行時創(chuàng)建的靜態(tài)Customer對象對象.不同不同 類型類型Customer容易的增刪改以適應需求變化!容易的增刪改
25、以適應需求變化!38TP-154n通過給出一個原型對象來指明所要創(chuàng)建的對象通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復制這個原型對象的方法創(chuàng)建的類型,然后用復制這個原型對象的方法創(chuàng)建出更多同類型的對象。原始模型模式允許動態(tài)出更多同類型的對象。原始模型模式允許動態(tài)的增加或減少產(chǎn)品類。的增加或減少產(chǎn)品類。n缺點是每一個類都必須配備一個克隆方法。缺點是每一個類都必須配備一個克隆方法。39TP-154Use Creational Design Patterns when creating complex objectsnFactory when creating individualsnA
26、bstract Factory when creating familiesnPrototype to “mix & match”nSingleton for exactly one, safely40TP-15441TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結構型模式結構型模式q代表相關對象的集合,代表相關對象的集合,q如何正確地組合類或對象如何正確地組合類或對象n行為型模式行為型模式q在對象集合中捕獲行為,在對象集合中捕獲行為,q解決類或對象之間如何交互和如何分配職責的問題解決類或對象之間如何交互和如何分配職責的問題42TP-154n
27、Facade nDecorator nComposite nAdapter nFlyweight nProxy 43TP-154門面型設計模式門面型設計模式Provide an interface to a package of classes為子系統(tǒng)中的一組接口提供一個一致的界面,為子系統(tǒng)中的一組接口提供一個一致的界面, FacadeFacade模式定義了一個高層接口,這個接口使得這模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。一子系統(tǒng)更加容易使用。* *為類包提供接口為類包提供接口Faade對象通常是對象通常是SingletonSingleton模式模式FacadeNotes
28、: 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ā)復雜性!46TP-154MyGameCharactersMyGameEngineMyGameCastfacadeMyGamefacadeMyGameEnvironmentMyGameEnvironmentfacade47TP-154bankCustomersClientmain() facadeBankCustomersdoDeposit( int amt, Customer cust, Accoun
30、t acc )getBankAccount( Customer cust, int accNum )getBankCustomer( String custName )introduceApplication()BankCustomerBankAccountCustomergetCustomerName()getNumAccounts()getPersonalNote()getAccount( int )AccountgetAccountNum()deposit( int )getBalance()1.nIntroMessageframeworkAccountExceptionCustomer
31、Exception48TP-154- modularizes designs by hiding complexity -隱藏復雜性的組件化設計隱藏復雜性的組件化設計-外部與一個子系統(tǒng)的通信必須通過一個外部與一個子系統(tǒng)的通信必須通過一個統(tǒng)一的門面對象進行。門面模式提供一統(tǒng)一的門面對象進行。門面模式提供一個高層次的接口,使得子系統(tǒng)更易于使個高層次的接口,使得子系統(tǒng)更易于使用。每個子系統(tǒng)只有一個門面類,而且用。每個子系統(tǒng)只有一個門面類,而且此門面類只有一個實例。但整個系統(tǒng)可此門面類只有一個實例。但整個系統(tǒng)可以有多個門面類。以有多個門面類。49TP-154裝飾設計模式裝飾設計模式Add respon
32、sibilities to an object at runtime.運行時負責添加或刪除類運行時負責添加或刪除類以對客戶端透明的方式擴展對象的功能,是繼承以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案,提供比繼承更多的靈活性。關系的一個替代方案,提供比繼承更多的靈活性。動態(tài)給一個對象增加動態(tài)給一個對象增加/ /刪除功能,增加由一些基刪除功能,增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。本功能的排列組合而產(chǎn)生的非常大量的功能。Decorator50TP-154n抽象組件(抽象組件(Component)給出一個抽象接口,給出一個抽象接口,以規(guī)范準備接收附加責任的對象以規(guī)范準
33、備接收附加責任的對象n具體組件(具體組件(Substance)定義一個將要添加附定義一個將要添加附加責任的類加責任的類n裝飾組件(裝飾組件(Decorator)負責給具體組件對象負責給具體組件對象添加附加的責任(功能)添加附加的責任(功能) 51TP-154ClientobjDecoratedDecorationdoAction()1SubstancedoAction()Componentadd( Component )doAction()void doAction() . / do actions special to this decoration objDecorated.doActio
34、n(); / pass along 具體組件抽象組件裝飾組件52TP-154n顧客可以開設不同類型的賬戶顧客可以開設不同類型的賬戶n應用程序列出可用的賬戶類型,客戶選擇應用程序列出可用的賬戶類型,客戶選擇n重復過程,直至用戶退出重復過程,直至用戶退出53TP-154ClientnextComponentAccountdescribe()1Customerdescribe()BankingComponentadd( Component )describe()CheckAccountdescribe()getLastCheckNum(): intSavingsAccountdescribe()ge
35、tInterestRate(): intCDAccountdescribe()getDuration(): intSetupAttemptToAddBadBankingComponentException靈活性:運行時創(chuàng)建或刪除顧客的賬戶靈活性:運行時創(chuàng)建或刪除顧客的賬戶具體組件修飾過程54TP-154- allows addition to and removal from objects at runtime - 動態(tài)地給對象添加或刪除一些額外動態(tài)地給對象添加或刪除一些額外的功能的功能55TP-154合成設計模式合成設計模式Represent a Tree of ObjectsDesign
36、 Pattern Summary合成模式將對象組織到樹結構中,可以合成模式將對象組織到樹結構中,可以用來描述整體與部分的關系。用來描述整體與部分的關系。Composite56TP-154NonLeafNodeComponent“包含的每個對象包含的每個對象都是都是 Component對象對象”“非葉節(jié)點有一個或非葉節(jié)點有一個或更多的組件更多的組件”leaf nodenon-leaf nodeObjectsClasses1.n57TP-154NonLeafNodedoIt()ponentComponentadd( Component )doIt()LeafNodedoIt()TypeANonLe
37、afNodedoIt()TypeBNonLeafNodedoIt()1.nClient非葉節(jié)點:驅動每個聚合對象非葉節(jié)點:驅動每個聚合對象執(zhí)行執(zhí)行 e.doIt()唯一接口唯一接口58TP-154:LeafNodenonLeaf1ChildX:NonLeafNodenonLeaf1ChildX:NonLeafNodeSequence Diagram for Composite:ClientdoIt()nonLeaf1:NonLeafNodedoIt()doIt()nonLeaf1ChildX:NonLeafNode:LeafNode:LeafNode59TP-154Pete:President
38、Able:ManagerBecky:ManagerLonny:TellerCal:ClerkTina:TellerThelma:Teller60TP-154ClientreportsSupervisoradd(Employee)EmployeestateName()1.nSetupClerkstateName()PresidentstateName()TellerstateName()ManagerstateName()61TP-154ComponentContainerWindow . .component1.nCanvas62TP-154Component0nchildren63TP-15
39、4- used to represent trees of objects.-合成模式用于處理對象的樹結構。合成模式用于處理對象的樹結構。64TP-154適配器設計模式適配器設計模式Allow an application to use external functionality in a retargetable manner.將一個類的接口轉換成客戶希望的另外一個將一個類的接口轉換成客戶希望的另外一個接口。接口。AdapterAdapter模式使得原本由于接口不兼模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。容而不能一起工作的那些類可以一起工作。重定向:允許應用程序以重定
40、位方式訪問外重定向:允許應用程序以重定位方式訪問外部功能;部功能;Adapter65TP-154ClientAbstractClassclientNameForRequiredMethod()AdapterclientNameForRequiredMethod() adaptee. requiredMethod();adapteeRequiredClassrequiredMethod()66TP-154Sequence Diagram for Adapter:ClientclientNameForRequiredMethod():AbstractClass:AdapterRequiredMet
41、hod()adaptee:RequiredClass67TP-154Financialamount()PrinciplecomputeValue()Client原有系統(tǒng)Adaptation 適配過程應用FinancialAdapteramount()legacyAdapteelegacyAputeValue(); FinancialAdapter繼承了繼承了Finacial,聚合了原有,聚合了原有Principal類類68TP-154ClientAbstractClassstandinForRequiredMethod()AdapterstandinForRequiredMethod() re
42、quiredMethod();RequiredClassrequiredMethod()69TP-154- to interface flexibly with external functionality.-靈活地與外部功能相關聯(lián);靈活地與外部功能相關聯(lián);-維護的價值,不必修改多處代碼;維護的價值,不必修改多處代碼; 70TP-154享元設計模式享元設計模式Manage a large number of objects without constructing them all.管理大量極為相似的類;管理大量極為相似的類;運用共享技術有效的支持大量細粒度的對象,即運用共享技術有效的支持大量
43、細粒度的對象,即在一個系統(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. . . . . .bigA:Big
45、AbigB: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 FlyweightBigCharconstructionCharget
46、Matrix( String color )BigCharFactorygetFlyweight( char )PagePrinter26singletonBigBsingletonBigAAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.76TP-154n享元模式在一般的項目開發(fā)中并不常用,而常應享元模式在一般的項目開發(fā)中并不常用,而常應用于系統(tǒng)底層開發(fā),解決系統(tǒng)性能問題。用于系統(tǒng)底層開發(fā),解決系統(tǒng)性能問題。nJava和和
47、.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 objects with
48、out efficiency penalties.- - 在不損失效率的前提下獲得大量單個在不損失效率的前提下獲得大量單個對象集合的優(yōu)勢;對象集合的優(yōu)勢; 78TP-154代理設計模式代理設計模式Avoid the unnecessary execution of expensive functionality in a manner transparent to clients.以對客戶端透明的方式,避免執(zhí)行不必要并且開以對客戶端透明的方式,避免執(zhí)行不必要并且開銷很大的功能銷很大的功能在開銷較大的功能處插入一個可訪問的類在開銷較大的功能處插入一個可訪問的類代理的理解?代理的理解?Proxy7
49、9TP-154AdaptationBaseActiveClassexpensiveMethod()anotherMethod() RealActiveClassexpensiveMethod()anotherMethod() ProxyexpensiveMethod()anotherMethod() Client realActiveObject. . . / One way to check if really needed:if ( realActiveObject = null ) / never referenced realActiveObject = getRealActiveOb
50、ject(); 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 metho
51、ds.- 可以顯著提高效率可以顯著提高效率 的設計模式的設計模式- Internet對象系統(tǒng)的開發(fā)多數(shù)使用對象系統(tǒng)的開發(fā)多數(shù)使用Proxy模式,將本地類指派為代理進行模式,將本地類指派為代理進行遠程處理遠程處理82TP-154Structural Design Patterns relate objects (as trees, lists etc.)nFacade :門面模式給對象的集合提供了接口:門面模式給對象的集合提供了接口nDecorator 裝飾模式在運行時增加對象,動態(tài)修飾裝飾模式在運行時增加對象,動態(tài)修飾nComposite 合成模式表示對象的樹型結構合成模式表示對象的樹型結構n
52、Adapter 適配器模式簡化外部功能的使用適配器模式簡化外部功能的使用nFlyweight 享元模式通過使用多重實例來最小化空間消耗享元模式通過使用多重實例來最小化空間消耗nProxy 代理模式代理模式 避免不必要的調(diào)用大開銷操作避免不必要的調(diào)用大開銷操作83TP-154電子科技大學電子科技大學 計算機學院計算機學院. .軟件學院軟件學院84TP-154n創(chuàng)建型模式創(chuàng)建型模式q以靈活的方式創(chuàng)建對象的集合以靈活的方式創(chuàng)建對象的集合n結構型模式結構型模式q代表相關對象的集合,代表相關對象的集合,q如何正確地組合類或對象如何正確地組合類或對象n行為型模式行為型模式q在對象集合中捕獲行為,在對象集合
53、中捕獲行為,q解決類或對象之間如何交互和如何分配職責的問題解決類或對象之間如何交互和如何分配職責的問題85TP-154nInterpreternIteratornMediatornObservernStatenChain of ResponsibilitynCommandnTemplate86TP-154RequirementsAnalysisDesignImplementationArchitectureFrameworkDetailed DesignxKey:= secondary emphasisx = main emphasis87TP-154停泊停泊to 碼頭 obstacles88
54、TP-154Customs應用應用: 可單獨重用可單獨重用 Ship ShipWorkmanShipTugboat1.n1港口應用港口應用目標:重用性目標:重用性*希望在其他應用中能分希望在其他應用中能分別使用別使用Ship和和Tugboat類類89TP-154ShipTugboatLeavingPortestimateTime()*控制著控制著Ship和和Tugboat類類的對象行為如何來為整個的對象行為如何來為整個過程計算時間。過程計算時間。EnteringPortestimateTime()BeingMaintainedestimateTime()90TP-154重用的實現(xiàn)重用的實現(xiàn)Sh
55、ipTugboatVesselPortMissionestimateTime()LeavingPortestimateTime()EnteringPortestimateTime()BeingMaintainedestimateTime()Mediator base class91TP-154p捕捉對象中的行為,包裝了一系列對象相捕捉對象中的行為,包裝了一系列對象相互作用的方式互作用的方式p在對象中封裝行為在對象中封裝行為 ,使得這些對象不必相,使得這些對象不必相互明顯作用?;ッ黠@作用。p將對象的行為和協(xié)作抽象化將對象的行為和協(xié)作抽象化92TP-154解釋器設計模式解釋器設計模式分析表達式分析
56、表達式, 應用程序處理表達式的語法問題應用程序處理表達式的語法問題使用一個遞歸的設計模式形式表使用一個遞歸的設計模式形式表示語法;示語法;將解釋傳遞到聚合對象;將解釋傳遞到聚合對象;Interpreter93TP-154n給定一個語言后,解釋器模式可以定義出其文法的一給定一個語言后,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器。客戶端可以使用這種表示,并同時提供一個解釋器??蛻舳丝梢允褂眠@個解釋器來解釋這個語言中的句子。個解釋器來解釋這個語言中的句子。n描述怎樣在有了一個簡單的文法后,使用模式設計解描述怎樣在有了一個簡單的文法后,使用模式設計解釋這些語句。所提到的語言是指任何解釋
57、器對象能夠釋這些語句。所提到的語言是指任何解釋器對象能夠解釋的任何組合。解釋的任何組合。n模式中需要定義一個代表文法的命令類的等級結構,模式中需要定義一個代表文法的命令類的等級結構,也就是一系列的組合規(guī)則。每一個命令對象都有一個也就是一系列的組合規(guī)則。每一個命令對象都有一個解釋方法,代表對命令對象的解釋。解釋方法,代表對命令對象的解釋。XML解析器?解析器?94TP-154AbstractExpressioninterpret()ClientTerminalExpressioninterpret()NonTerminalExpressioninterpret()1.n遞歸分析樹的根節(jié)點遞歸分析
58、樹的根節(jié)點表達式的復雜造成表達式的復雜造成Interpreter設計的遞歸形式設計的遞歸形式95TP-154260Mhz & 64MB 400Mhz & 128MB 260Mhz & 32MB 裝配過程裝配過程 . 網(wǎng)絡系統(tǒng)的顧客訂單表達:網(wǎng)絡系統(tǒng)的顧客訂單表達:(260 64) (400 128)(260 32)96TP-15497TP-15498TP-15499TP-154Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), wit
59、h permission.100TP-154把網(wǎng)絡訂單的每部分過程進行分解!把網(wǎng)絡訂單的每部分過程進行分解!101TP-154Componentassemble()Computerassemble()NetSystemassemble()component1component2RAMdescribe()CPUdescribe()cpuramClientSetupgetInputFromUser()parse()10.1102TP-154- 分析的一種形式和處理表達式的一種方法分析的一種形式和處理表達式的一種方法. .103TP-154迭代設計模式迭代設計模式提供一種訪問聚合對象的元素并且不暴露
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 alphabetic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年建筑安裝工程項目合同
- 力課件教學課件
- 2024年廣告代理合作協(xié)議
- 2024年工程咨詢與技術服務合作協(xié)議
- 2024年度公司用車管理協(xié)議
- 2024年度建筑工程設計、施工購銷合同
- 2024年度35kv高壓線路施工合同
- 2024年度某影視公司與某投資公司關于某電影項目融資的合同
- 公司年會的演講稿模板八篇
- 為世界無車日活動宣傳標語(155句)
- 2024年保安員證考試題庫及答案(共260題)
- 公務員2024年國考申論真題(地市級)及參考答案
- XXXX酒店管理公司成立方案
- 民用無人機操控員執(zhí)照(CAAC)考試復習重點題及答案
- 疼痛科整體規(guī)劃和發(fā)展方案
- 2024年中國南水北調(diào)集團水網(wǎng)水務投資限公司及下屬單位社會招聘高頻難、易錯點500題模擬試題附帶答案詳解
- (新版)食品生產(chǎn)企業(yè)食品安全員理論考試題庫500題(含答案)
- 七年級語文上冊第13課《紀念白求恩》公開課一等獎創(chuàng)新教案
- 統(tǒng)編版語文六年級上冊第八單元大單元整體教學設計
- 教師個人業(yè)務學習筆記(41篇)
- 2025年高考語文復習備考復習策略講座
評論
0/150
提交評論