版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计复习提关于软件设计复习提关于GRASP:参考笔记最后一页;高层结部件、连接件、配高层高层抽象的作需求(质量属性部件、连接件、配高层高层抽象的作需求(质量属性、项目环境、商业关注软件体系结交流媒介的作问题、候选设计、理由、解决方设计指导开发的作5-1理解软件体系结构的高层结构Componentsarethelocusofcomputationandstate系统的主要状态和计Connectorsarethelocusofrelationsamongcomponents部件间的注意:部件和连接件都是第一等级实体,占同等主要地位,连接件不直接关联部件n决定了部件和连接件的匹配关系。Connector独立于component:connection的定义应该本地化访问限制可能在体系结构=设计体系结构+抽象体系结构部件+连接件+配1Elementsthatencapsulateprocessinganddatainasystem’sarchitecturearereferredtoassoftwarecomponents负责系统的主要数据和处理的元素AsoftwarecomponentisanarchitecturalAsoftwarecomponentisanarchitecturalentityencapsulatesasubsetofthesystem’sfunctionalityand/ordatarestrictsaccesstothatsubsetviaanexplicitlydefinedinterfacehasexplicitlydefineddependenciesonitsrequiredexecutioncontext明确定义了对其执行所需要context上下文的依赖Componentstypicallyprovideapplication-specificservicesImplementation实PrimitiveComponents原始部Modules,Compositecomponents2连接件IncomplexsystemsinteractionmaybecomechallengingthanthefunctionalityoftheindividualcomponentsAsoftwareconnectorisanarchitecturalbuildingblocktaskedeffectingandregulatinginteractionsamongcomponents负责封装交互信息协调component间的交互的体系结构块,交互与componentTheymediateinteractionsbutarenot“things”tobe“hookedup;”rather,theyprovidetherulesforhooking-up. Connectorstypicallyprovideapplication-independentinteractionfacilitiesImplementation实PrimitiveCompositeCompositespecificwayina3配置Componentsandconnectorsarecomposedinsystem’sarchitecturetoaccomplishthatsystem’sobjective定系统体系结Anarchitecturalconfiguration,ortopology,isasetofspecificassociationsbetweenthecomponentsandconnectorsofasoftware关注点软件体系结构的主要关注点可以分为三个类型Rationalofsoftwarearchitecture软件体系结构的规则,交流媒Janusbetweenproblemdomainandsolutionsystem,ensuretheShowshowfunctionalandnon-functionalrequirementsaremet功能和Architectsareagentsofcustomsnotdevelopers体系架构师应当代理顾客TheconceptintegrityrepresentedbysoftwarearchitecturecomeAchievingqualityattributesmustbeconsideredthroughoutdesign,implementation,anddeployment.质量属性必须在设计,实现和部署中都考虑Satisfactoryresultsdependongettingthebigpicturearchitecture&thedetails(implementationright.(bigpicutre)和实现availability,modifiability,performance,security,testability,andtimetomarket,cost&benefit,projectedlife,targetmarket,rolloutArchitecturalqualitiesconceptualintegritycorrectness&completenessbuildability概念 Asoftwaresystem’sarchitectureisthesetofprincipaldesigndecisionsaboutthesystem软件体系结构是系统的最基本决策的集合。Principal”impliesadegreeofimportancethatgrantsadesigndecision“architecturalstatus”“最基本”:设计决策在保证体系结构状态上的重要性ItimpliesthatnotalldesigndecisionsareThatis,theydonotnecessarilyimpactasystem’sReflectsmajordesigndecisions反映主要的设计决策Architectureestablishesthecontextfordesignandimplementation为Rationaleforwhyoneapproachtaken,whatimpactithas选择的理由和anarchitecturaldesigndecisionAdescriptionofthesetofarchitecturaladditions,subtractionsandmodificationstothesoftwarearchitecture,therationale,andthedesignrules,designconstraintsandadditionalrequirementsthat(partially)realizeoneormorerequirementsonagivenarchitecture.RationaleThereasonsbehindanarchitecturaldesigndecisionItdescribeswhyachangeismadetothesoftwareDesignrulesanddesignconstraintsPrescriptionsforfurtherdesigndecisions.RulesaremandatorydescribedescribetheoppositesideofdesignrulesTheydescribewhatisnotallowedinthefutureofthedesign.非强制性规定,(什么事不能做)Additionalrequirements额外需求额外设计决bythearchitecture.Thesenewrequirementsneedtobeaddressedbyadditionaldesign补充:定义PerryandSoftwareArchitecture={Elements,Form,RationaleWhat基本单位howwhy限“Thearchitectureofasoftwaresystemdefinesthatsystemintermsofcomputationalcomponentsandinteractionsamongthosecomponents.ShawandGarlan96]软件体系结构定义了系统的计算部件和部件间的交互部件+连接件+配“Thesoftwarearchitectureofaprogramorcomputingsystemisthestructureorstructuresofthesystem,whichcomprisesoftwarecomponentstheexternallyvisiblepropertiesofthosecomponents,andtherelationshipsamongthem.”[Bass,Clements,andKazman98]软件体系结构是系统的结构,包括了软件部件+对外可见属性+部件间关Everysoftwarehasoneormorearchitecturestructures有软件有一理解:参考去年整理软件体系结构的概高层架包括静态和动态属性指该系统的结构,包括软件组件,及其外部可见属性,以及组件间的关系;由计算件和组件间交互组成组件模块,包,层,文件,数据库,客户端,服务如何定组件的函数和职责,以及接口必须被定连接器允许组件间交互的构造块(不是简单的接口组件连接器包括显式的和隐式的允许组件间交互的构造块(不是简单的接口组件连接器包括显式的和隐式的,有时仅仅是一个通道,有时包括自己的逻辑和常见连接器(Implicit)事件,C/S中间件,消息和消息总线,共享变量,过程调用(本地、远程道(Explicit)代理,适配交流表现功能和非功能需求(质量)如何被满质量的种类,,,,,商业质量:投放市场的时间,投入&回报,计划周期,目标市场,首次展出计划,遗留系整建筑质量:观念一致性,正确性&完整性,可建造设计决策反映设计决往往根据架构师的知识背景实建立了软件设计和实现的背景,解释一种方法被采用的根本原因,它有什么影结构决策是最基本的决策,改变它将会引起很多连锁的反使得修改变得容易控制,方便于系统原型的演软件架构是系统的基本组织,包含了它的组件,及其关系与环境,以及控制设计和演化原4+1View:多视图模EnduserLogicalProcessPhysicalLogicalView最主要,出发点,需求的映(Object-orientedThesystemisdecomposedintoasetofkeyabstractions,taken(mostly)fromproblemdomainintheformofproblemdomainintheformofobjectsorobjectclasses系统被分解为关键抽象,从问题域{Component,connector,configuration}ViewerEnd-user终用considers:Functionalrequirements-Whatthesystemshouldprovideintermsofservicestoitsusers.功能需求,提供给用户的服务,功能性分析,设计决策Thisdecompositionisnotonlyforthesakeoffunctionalanalysis,butalsoservestoidentifycommonmechanismsanddesignelementsacrossthevariouspartsoftheProcess(Theprocessdecomposition)viewer:Integrators集成师considers:Nonfunctionalrequirementsconcurrencyperformancescalability)styleSeveralstyleswouldfitinthisviewGarlanandShawsArchitecturestylesUsesmultiplelevelsofabstractionsalogicalnetworkofprocessesatthehighestlevel多层次抽象性,最高层是进城的逻辑网络Aprocessisagroupingoftasksthatformanexecutableunit:相关tasks集结成可执行单元,单独进程MajorTasks:Arch.relevanttasksMinorTasks:Helpertasks.(Buffering)辅:辅助次DevelopmentBasisofalineofproductThedevelopmentarchitectureofthesystemisrepresentedbymoduleandsubsystemdiagramsshowingtheexport’andimport’relationships.系统分解,产Viewer:ProgrammersandSoftwareManagers开发人员,软件(Hierarchyoflayers,softwaremanagement,reuse,constraintsoftools)Stylelayeredstyle分层(优点每层可以在分解为模Physical(MappingthesoftwaretotheTopology,Thevariouselementsidentified—networks,processes,tasks,andobjects—needtobemappedontothevariousnodes.WeexpectthatseveraldifferentphysicalconfigurationswillbeusedViewer:SystemEngineers系统工程Considers:Non-functionalreq.regardingtounderlyinghardware(availability,(PuttingitallTheelementsinthefourviewsareshowntoworktogetherseamlesslybytheuseofasmallsetofimportantscenarios指挥,连接四个试图:,设Helpillustrateandvalidatethedocument说明和验证文GRASP模式GRASPstandsforGeneralResponsibilityAssignmentSoftwareGRASPpatternsfocusononeofthemostimportantaspectsofobjectdesign,assigningresponsibilitiestoclasses.LowHigh见笔记最后一页设计模式设计结构的抽象,针对疑难点,对原则思想的应comprisesclassand/orobject成:类和对象及其之间的关系,distillsdesignexperience设计过程中的经验总Designpatternshave4essentialProblem:intentcontext,whento解决方案Solution:UML-likestructure,abstract结果Consequences:resultsand模型:用于封装与应用程序的业务逻辑相关的数据模型:用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方视图:负责生成用户界面的部控制器:控制器起到不同层面间的组织作用,用于控制应用程序的流1-111模块结构化的内聚与耦合类型参考笔耦合一个模块不通过正常入口转到另一模块内部公共耦合:havereadandwriteaccesstothesameglobal控制耦合:ifmodule1candirectlyaffecttheexecutionofmodule2module1passesa“controlparametertomodule2withlogicalcohesion或者模2返回代码不仅指示成功或失败而且指示1(callingmodule)执行一些动作。(suchaswritinganerrormessageinthecaseoffailure).据结构或外部变量),或者无多余的信息被传递。举公共耦Coincidentalcohesion:onesupportingtasksCoincidentalcohesion:onesupportingtasksthathavenomeaningfulrelationshiptooneanotherLogicalGobyCarGobyTrainGobyBoatGobyTemporalcohesion:onesupportingtasksthatareallrelatedin例如“DoAllStartupActivities,”or“DoAllShutdownProceduralcohesion:alltheoperationsitperformsarerelatedtoasequenceofstepsperformedintheprogram.CleanUtensilsfromPreviousMakePhoneChopCommunicationalcohesion:amoduleperformsoperationsrelatedtoasequenceofstepsperformedintheprogramCommunicationalcohesion:amoduleperformsoperationsrelatedtoasequenceofstepsperformedintheprogram(seeproceduralcohesion)ANDalltheactionsperformedbythemoduleareperformedonthesamedata.modulesupportingtheFindTitleofFindPriceofFindPublisherofFindAuthorofFunctionalcohesion:focusesonexactlyonegoalor“function”例如ComputeCosineofAngleInformationalcohesion:Informationalcohesiondescribesamoduleasperformingnumberofactions,eachwithauniqueentrypoint,independentcodeforeachaction,andalloperationsareperformedonthesamedata. classtype Componentcoupling:bytheuseofaclassasdomainofsomeinstancevariableofanotherclassWholevariable:Creator:Creatorinsomemethod’sHidden:GivenbyanotherScattered:在实现中但不在规格说明中SpecificInheritanceModificationinheritancecoupling:无规则和限制的修改2Refinementinheritancecoupling:根据规则定义新的(wholeparentandrefinementof(wholeparentandrefinementofExtensioninheritancecoupling:只增加不修改1connectionwholecontentPartofprogramhandleslookupforWhencustomernotfound,componentaddscustomerbydirectlymodifyingthecontentsofthedatastructurecontainingcustomerdata.Whencustomernotfound,componentcallstheAddCustomer()methodthatisresponsibleformaintainingcustomerdata.CommonEachsourceprocesswritesdirectlytoglobaldatastore.EachsinkprocessreadsfromglobaldataImprovementDatamanagercomponentisresponsiblefordataindatastore.Processessenddatatoandrequestdatafromdatamanager.StampTheprintroutineofthecustomerbillingacceptsacustomerdatastructureasanargument,parsesit,andprintsthename,address,andbillinginformation.ImprovementTheprintroutinetakesthecustomername,address,andbillinginformationasanLogicalAcomponentreadsinputsfromtape,disk,andnetwork.Allthecodeforthesefunctionsareinthesamecomponent.Operationsarerelated,butthefunctionsaresignificantlydifferent.Adevicecomponenthasareadoperationthatisoverriddenbysub-classcomponents.Thetapesub-classreadsfromtape.Thedisksub-classreadsfromdisk.Thenetworksub-classreadsfromthenetwork.Asysteminitializationroutine:thisroutinecontainsallofthecodeforinitializingallthepartsofthesystem.Lotsofdifferentactivitiesoccur,allatinitAsysteminitializationroutinesendsaninitializationmessagetoeachEachcomponentinitializesitselfatcomponentinstantiationEachcomponentinitializesitselfatcomponentinstantiationGeneral,Scoped模块间connection计算:如果M个模块共享NM*N如果M1个模块共享N1个数据,M2(M1+M2=M,N1+N2=N)个模块共享N2个数据,则有作用:Helpsdevelopersandmaintainersofthesystemfindmodulesaffectedbya帮助开发者和维护者找到被变化影响的模块.Well-structuredModuleGuideneededtoprovidedevelopmentsupportandtocutdownmaintenancecosts.结构良好的moduleguide可以提供开发支持和减少维护开销Specifically,foreachmoduletheModuleGuidestatesthesecretsassociatedwitheachmodulePrimarySecret:hiddeninformationthatwasspecifiedtothesoftwaredesignerHiddeninformationcontainedwithinPrimarySecret:hiddeninformationthatwasspecifiedtothesoftwaredesignerHiddeninformationcontainedwithinthemodule.准备对外隐藏andasecondarysecretwhichreferstoimplementationdecisionsmadebythedesignerwhenimplementingthemoduledesignedtohidetheprimarysecret.Implementationdecisionsusedtoimplementthetherolesplayedbytheindividualmodulesintheoverallsystemoperation;模块thefacilitiesprovidedbyeachmodule.ModuleGuideHelpsdevelopersandmaintainersofthesystemfindmodulesaffectedbyachange帮助开发者,维护者找到被改变影响的模块ModuleInterfaceDocumentContainspreciseandcompletedescriptionofinterfacetoeachmodule精确完整的描述每个模块的接口ModuleDesignDocumentAninternaldesigndocumentforeachimplementationofamodule每个模块实现的内部设计文档RequirementsDocumentModuleGuidereferstoitfortherelatedchanges(不考察给代码的情况,以下内容参考去年总结材料1以模块为对象的体系结构风InteractionShareData(BlackBoard,InteractionDataFlow(BatchSequential,PipeandFilter)ControlExplicit(CallandMainprogramandChangeinInteractionShareData(BlackBoard,InteractionDataFlow(BatchSequential,PipeandFilter)ControlExplicit(CallandMainprogramandChangeinChanginSpaceTimeReuseMainProgramandSubroutineComponents:Connectors:MainProgramandSubroutineComponents:Connectors:顺序系Object-OrientedComponents:Connectors:PipeandFilterArchitecturalPipeandFilterArchitecturalConnectors:Pipe,作为流传输的通道,把一个Filter的输出传到另一个的输入整个网络的正确性不应该依赖于Filter的排列顺序完全独立,可以随时增减filter,可以并行开发Implicitinvocation(Eventbased)Componentsagent代理程序(对Connectors:broadcastConnectors:每个agent的行为方式:(LayeredComponents:Connectors:LayeredComponents:Connectors:MVCModel:维护领域模型,并通知View相关变化Controller:改变model 2以进程为对象的体系2以进程为对象的体系结构风格Publish-SubscribeArchitectureConnector:event 以物理单元 以物理单元为对象的体系结构风Client-Three-Tier(N-Tier)DistributedObjectsDistributedResources(http)Client-Components:Connectors:RPC的交互协议(缺点:server设计困难,成为瓶颈层:存储层(或者后端):Peer-to-::举例:eMuleeDonkey,Gnutella,Freenet,OnShareetc.areexamplesofaP2PDistributedMida(http全局分全局分Globalmovingfromsoftwarerequirementsspecificationtostructuralviewsofthesoftwarearchitecture从软件需求规格到软件体系结构的结构化视图的过程步骤:Globalanalysisactivitiesandoneistodesignanddescribethestructureofthesystem.设计和描述系统的结Usefourcomplementaryviewstoreducethecomplexityofdesigningandunderstandingthearchitecture.利用互补的视图来减少设计和理解体Differentviewshavedifferentengineeringconcerns,sonotallaspectsofthesystemmustbeconsideredatonce.不同视图有不同关注点,并不ThesecondpartofourapproachisGlobalGlobalAnalysisproducesdocumentationartifactsthatdescribethecontextandrationalefordesigndecisionsGA生描述设计决策上下文和Identifytheexternalinfluencingfactorsandcriticalrequirementsthatcouldaffectthearchitecture标识可能影响体系结构的外部影响因素和关键Analyzethemtocomeupwithstrategiesfordesigningthearchitecture2aAnalyzingfactors(constraintsandquality)Three(3)stepStep1:Identifyanddescribethefactors识别可能影响系统体系结构的需Productfactors:Systemqualityattribute产品因素:质量需Organizationalfactors:Businessqualityattribute织因素:业务Step2:Describingfactors,CharacterizetheStep2:Describingfactors,CharacterizetheflexibilityorchangeabilityofthefactorsStep3:AnalyzetheimpactofthefactorsfactorThree3stepsprocedure产生issueRelatingfactorstoproblems目的:弥补规格需求和SA软件体系结构件的gap差距;重点关注体系结构设计需求(ADR:architecturedesignrequirements)GA:将ADR(SSS:system据SSS和集中式委派式分散式AcontrolstyleisawaythatdecisionmakingisdistributedamongprogramCentralized—AfewcontrollermakeallsignificantDelegated—DecisionmakingisdistributedthroughtheprogramwithafewcontrollersmakingthemaindecisionsDispersed—Decisionmakingisspreadwidelythroughtheprogramwithfewornocomponentsmakingdecisionsontheirown Collection和实例Ceae)neIt//clientCeae)neIt//client())Aggreea)emyList=egate(m(=terator(Proxypattern:clientsubject接口交问题:提供代理以供其他对object的访问。远程:提供给不同的地址空间的地址的对象的本地代理虚拟:根据需求创建开销对象Subject,realsubjectand用户subject中定义的抽象方法进行操subject的实现在realsubject和proxy中如果接受到有危险的调用,exception或者alarm提Proxy代理了对于realsubject安全调用。Clientproxy.Proxy模式引入了对于对象的一个间接的访问方式远程proxy隐藏了远程的实现事实object不在同一地oIteratorfirst(虚拟proxy可以进行优化,实际对象仍存在保护proxy额外的安全。简单,控制,安虚拟proxy可以进行优化,实际对象仍存在保护proxy额外的安全。简单,控制,安全,允许写但是需要迭代器实现)refers pattern:原型类声明一个用来克隆自己的接传递拷贝,用原型实例表示要创建的对象类型,通过拷贝为原型创建新的对象思想:请求后得到拷贝,新的object,每个请求得到拷贝的不同版本参与者Prototype原型:生命了拷贝自己的接concretePrototype具体原型:clone自己的实现操客户:对原型请求的对象,通过请求原型对象克隆自己来创建新对总结:针对接口编程,而不是实现继承允许定义一组有相同接口的对所有引申类都与基础类有共享的接所有子类回应在其抽象父类接口中的请求LSP:所有类都必须可以被其父类替换,子类可以替代父类存在De-Coupling有哪些手LSP:所有类都必须可以被其父类替换,子类可以替代父类存在De-Coupling有哪些手段Avoidrepetition:doitonce防止避免重重复意味着耦合,因为对重复代码的一块进行改变意味着要改抽象依赖倒置,依赖接口而不是依赖实抽象不能依赖细节,细节应该依赖抽高层模块不应该依赖于底层模块,二者都应依赖于抽在一个分离模块即将实现的模块中定义接口,基本的方式来打破依赖和降ehanisdependsMediatorpattern调停者模式通过避免对象互相显式的指向对方从而降低耦问题多个对象重复访问,无规律性一个对象集合的交互良好定义,但是交互方式复杂。通常有非结构依赖对象复用困难,因为对象指向和交互很多其他的对Mediator:定义了与colleague对象交互的接口,通常被告知事件或者状concreteMediator:实现与colleague交互的具体行为,了解和维护colleaguecolleague道自己Mediator每colleague与其他colleague互时需要先与自己的mediator互,为mediator供了服务,colleague可能请求相同也可能不同结果定义对象,其封装了一组对象的交互方 促进低耦合,通过纺织对象显示的引用彼此让人独立的拓展其交集中式控 icyMechanisdependMhan.Bridgepattern桥接模式:问题常Bridgepattern桥接模式:问题常用的处理一个抽象有多种实现的方式是继然而这会使实现与抽象进行绑并不能够灵活,可能需要独立的修改实现或参与者Abstraction:定义了抽象RefinedAbstraction:拓展由abstraction定义的接Implementorabstraction了原始操作,abstration提供更加高级的基于该原始操作的操作。实现和接口之间解耦合,抽象与实现独立避免了类型检查,降低了变异的时间,减少了编译时的依赖提高了系统的可扩展将实现细节隐藏,用户不可内聚又是可以实现差异性,接口实现都可以修改,抽象和实一个模块的信息隐藏有哪两种基本类型1)每个模块有一个基本外部的行为和内部隐每个模块隐藏重要的设计决策的实现,只有模块的组成可以了解细方法:门面模式FacadepatternOCP:模块可能有附加secrets:secretOCP:Open/closedprinciple开关原则?软件实体应该对扩展开放,对修改OCP:Open/closedprinciple开关原则?软件实体应该对扩展开放,对修改关闭。change方法:策略模式StrategypatternDecoratorpattern适配器模式AdaptorBasicFaçadeAnticipateStrategy如果上下文也有可变性:用桥接模式Beopenforextension,Beclosedfor问题 在不修改类代码的情况Beopenforextension,Beclosedfor问题 在不修改类代码的情况下拓展类的实例的功用聚合代替继承,比静态的继承更加灵关键是对其装饰的组件来说,decorator是透明的,这样可以嵌套定义结比继承更加灵防止继承树堆积过高而过于复有很多类很相似,理解上比较困难,难以理解和调及其组件并不相同,检查对象相似性和相同性可能引起问Adapter思想新增加功能使用已有接口时,接口不将类的接口转化为用户期待让类共同工作,不受到不兼容接口的影解决结果灵活性:框架可被开发用来与不兼容的类协重用性:现有类实现的有用功能可以被重类之间的接口协健壮性:现有类被重用但是不需要修改,防止引入不必要的潜在实现共性与可变性有哪些手段12StrategypatternPNightTrafficeRushDayTiCyc实现共性与可变性有哪些手段12StrategypatternPNightTrafficeRushDayTiCycCyclCycle()LightsPolicy*IntersectNextEvent()ChangePolicy(LightsPTrafficStrategy问题许多相关的类只是在其行为表现上不同,strategy提供一种给类配置多种行为的一种Strategy问题许多相关的类只是在其行为表现上不同,strategy提供一种给类配置多种行为的一种一个雷定义许多行为,这些在其操作中作为多种状态条件存需要算法差异性可变性与重用性一组相关的算法扩子类的替代:context类分配为子类,直接给其其差异性复杂性,难于理好:strategy减少了条件判断语坏:逻辑分离,用户必须意识到是不同的strategy如果复杂和多种算如果在某些固定特点中有变更的行如果有复杂的条件判定语问题对象的行为依赖于其状态:运行时的变更行为依赖于状解决求concretestateDUIXIANG状态决定concreteState类,把自己作为参数传递给Context只提供interface,物具体内容,用户不直接与state切换状态:context或者concretecontext对象可以决定concreteState对象的变结果根据状态表根据状态表现异常性,状态转换,本地状态决定特定行为容易增加新的状态:新的concrete增加了类结构的规可以共享数据区:如果无实举例:publicinterfaceIState{}PublicclassOffStateIState{PublicvoidswitchFire(FireSwitchsw){sw.setState(newSmallState());}}…3运行时静态编译:共运行时注册:差异Callbacks:用户方法,注册在服务器,服务器可以撤销。用于拓展的方式。在服务器的对象上操Observerpattern:1问题定义了对象间的一对多的依赖,这样一个对象改变状态,其依赖被通知并自解决结果灵活性,可变性和重用性:“event”事件风格,低耦更加复杂:难于理解和测使用:调用对方时又差异性问题,不知对方状当一个对象改变需要改变其他,但不知道要改变的是哪个对当对象应该通知其他其他对象,但不假设其知道哪些对象。不希望这些对象紧密耦 Command问题专 Command问题专门对对象进行注册,action处理后交给别人管通过对象的行为来参数化对可以在任何时刻制定,queue队列和执行通过存储context上下文来支持结果解耦合了请receiver和可以在栈或者队列中存储命令:命令处理器模式维护历史记容易支持undoredo:必须提供多余的状态信息来防止易于拓展指对象的创建有哪些常见解决方法简单 无限制的实例,创建一个类型,简单实例化和初始CreatorpatternCouplingpatternCohesion复杂Singletonpattern问题:又是需要一个特定类只有一个实解决Constructorprivate:无法从外部调生命类的实例的私有静态单解决Constructorprivate:无法从外部调生命类的实例的私有静态单写公共的方法或者相似方法,允许对单个实例进行访保护或者综合方法来保证其在多线程程序上可以运)例publicclassSingletonprivatestaticSingletoninstance=privateSingleton()//}publicstaticSingleton{if(instance==null)instance=new}return}//..其它实}2(思考题中有)场景3:多种类型,创建类型的差异性SimpleSimplefactory实例…ct把创建不同pizza的If-else把创建不同pizza的If-elseProduct:定义factorymethod:实现了Creator:声明了factorymethod,返回product类型的对象;也可能定义了factorymentod的缺省实现,返回缺省的concreteproduct类ConcreteCreator:重写factorymehtod,返回一个concreteproduct的实例Client需要产生creatorconcreteProduct对象Factorymethod的例Abstractfactory:指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品目的Factorymethod的例Abstractfactory:指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品目的:为创建一组相关或者依赖的类型提供接口,但无需知道其具体类解决abstractFactory:声明了一个实例,该实例的主要操作是产生singleton初始化,唯一性Abatractproduct:声明了一个product对象的类型的接口,concretefactory产生concreteproductsConcreteproduct:定义了要由对应的concretefactory来创建product对象结果好abstract使交换产品家族容易:只要改变加强products之间的一坏很难支持新类型的产需要重abstractfactory和其子Abstractfactory和Abstractfactory和Prototypepatternp=cloreturncopytfcopyp=cloreturncopytfcopyof 设计模式部分所有的思考寻找一个需要访问集合变量的简单场景:编程实现:IteratorPatternandProxy//学生打印出所有的答interface{void}//集合interfacepublicIterator}//代理模式中的realsubjectIStudent{Answersans;publicvoid{String[]str={"a","b","c"};ans=newAnswers(str);}publicvoid}}IStudent{Studentst;publicvoidprintAnswer(){}t}//答案的枚举Iterator{Answersans;int}//答案的枚举Iterator{Answersan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版旅游租车合同违约赔偿标准说明4篇
- 二零二五版罗马柱设计与施工一体化合同4篇
- 二零二五版文化旅游项目合作协议书4篇
- 二零二五年度高端学府合作办学项目协议书3篇
- 4我爱学语文说课稿-2024-2025学年一年级上册语文统编版(2024)001
- 二零二五年度建筑工程竣工备案合同3篇
- 二零二五年度环保型车间承包合同模板4篇
- 2025版智能家居产品用户免责声明合同范本4篇
- 二零二五年度旅游代理合同终止及旅游产品开发合作协议4篇
- 二零二五版旅游行业风险管理顾问协议4篇
- 小学数学六年级解方程练习300题及答案
- 电抗器噪声控制与减振技术
- 中医健康宣教手册
- 2024年江苏扬州市高邮市国有企业招聘笔试参考题库附带答案详解
- 消费医疗行业报告
- 品学课堂新范式
- GB/T 1196-2023重熔用铝锭
- 运输行业员工岗前安全培训
- 公路工程安全风险辨识与防控手册
- 幼儿园教师培训:计数(数数)的核心经验
- 如何撰写和发表高水平的科研论文-good ppt
评论
0/150
提交评论