




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
23种设计模式 UML 类图及对应示例代码 (一)收藏1.DoFactory.GangOfFour.Abstract.Structural Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。usingSystem;namespaceDoFactory.GangOfFour.Abstract.Structural/MainAppstartupclassforStructural/AbstractFactoryDesignPattern./classMainApp/Entrypointintoconsoleapplication./publicstaticvoidMain()/Abstractfactory#1AbstractFactoryfactory1=newConcreteFactory1();Clientclient1=newClient(factory1);client1.Run();/Abstractfactory#2AbstractFactoryfactory2=newConcreteFactory2();Clientclient2=newClient(factory2);client2.Run();/WaitforuserinputConsole.Read();/AbstractFactoryabstractclassAbstractFactorypublicabstractAbstractProductACreateProductA();publicabstractAbstractProductBCreateProductB();/ConcreteFactory1classConcreteFactory1:AbstractFactorypublicoverrideAbstractProductACreateProductA()returnnewProductA1();publicoverrideAbstractProductBCreateProductB()returnnewProductB1();/ConcreteFactory2classConcreteFactory2:AbstractFactorypublicoverrideAbstractProductACreateProductA()returnnewProductA2();publicoverrideAbstractProductBCreateProductB()returnnewProductB2();/AbstractProductAabstractclassAbstractProductA/AbstractProductBabstractclassAbstractProductBpublicabstractvoidInteract(AbstractProductAa);/ProductA1classProductA1:AbstractProductA/ProductB1classProductB1:AbstractProductBpublicoverridevoidInteract(AbstractProductAa)Console.WriteLine(this.GetType().Name+interactswith+a.GetType().Name);/ProductA2classProductA2:AbstractProductA/ProductB2classProductB2:AbstractProductBpublicoverridevoidInteract(AbstractProductAa)Console.WriteLine(this.GetType().Name+interactswith+a.GetType().Name);/Client-theinteractionenvironmentoftheproductsclassClientprivateAbstractProductAAbstractProductA;privateAbstractProductBAbstractProductB;/ConstructorpublicClient(AbstractFactoryfactory)AbstractProductB=factory.CreateProductB();AbstractProductA=factory.CreateProductA();publicvoidRun()AbstractProductB.Interact(AbstractProductA);2.DoFactory.GangOfFour.Adapter.Structural Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。usingSystem;namespaceDoFactory.GangOfFour.Adapter.Structural/MainAppstartupclassforStructural/AdapterDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()/CreateadapterandplacearequestTargettarget=newAdapter();target.Request();/WaitforuserConsole.Read();/TargetclassTargetpublicvirtualvoidRequest()Console.WriteLine(CalledTargetRequest();/AdapterclassAdapter:TargetprivateAdapteeadaptee=newAdaptee();publicoverridevoidRequest()/Possiblydosomeotherwork/andthencallSpecificRequestadaptee.SpecificRequest();/AdapteeclassAdapteepublicvoidSpecificRequest()Console.WriteLine(CalledSpecificRequest();3.DoFactory.GangOfFour.Bridge.Structural Bridge:将抽象部分与它的实现部分分离,使之可以独立变化。桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。usingSystem;namespaceDoFactory.GangOfFour.Bridge.Structural/MainAppstartupclassforStructural/BridgeDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()Abstractionab=newRefinedAbstraction();/Setimplementationandcallab.Implementor=newConcreteImplementorA();ab.Operation();/Changeimplementionandcallab.Implementor=newConcreteImplementorB();ab.Operation();/WaitforuserConsole.Read();/AbstractionclassAbstractionprotectedImplementorimplementor;/PropertypublicImplementorImplementorsetimplementor=value;publicvirtualvoidOperation()implementor.Operation();/ImplementorabstractclassImplementorpublicabstractvoidOperation();/RefinedAbstractionclassRefinedAbstraction:AbstractionpublicoverridevoidOperation()implementor.Operation();/ConcreteImplementorAclassConcreteImplementorA:ImplementorpublicoverridevoidOperation()Console.WriteLine(ConcreteImplementorAOperation);/ConcreteImplementorBclassConcreteImplementorB:ImplementorpublicoverridevoidOperation()Console.WriteLine(ConcreteImplementorBOperation);4.DoFactory.GangOfFour.Builder.StructuralBuilder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。usingSystem;usingSystem.Collections;namespaceDoFactory.GangOfFour.Builder.Structural/MainAppstartupclassforReal-World/BuilderDesignPattern./publicclassMainApp/Entrypointintoconsoleapplication./publicstaticvoidMain()/CreatedirectorandbuildersDirectordirector=newDirector();Builderb1=newConcreteBuilder1();Builderb2=newConcreteBuilder2();/Constructtwoproductsdirector.Construct(b1);Productp1=b1.GetResult();p1.Show();director.Construct(b2);Productp2=b2.GetResult();p2.Show();/WaitforuserConsole.Read();/DirectorclassDirector/BuilderusesacomplexseriesofstepspublicvoidConstruct(Builderbuilder)builder.BuildPartA();builder.BuildPartB();/BuilderabstractclassBuilderpublicabstractvoidBuildPartA();publicabstractvoidBuildPartB();publicabstractProductGetResult();/ConcreteBuilder1classConcreteBuilder1:BuilderprivateProductproduct=newProduct();publicoverridevoidBuildPartA()product.Add(PartA);publicoverridevoidBuildPartB()product.Add(PartB);publicoverrideProductGetResult()returnproduct;/ConcreteBuilder2classConcreteBuilder2:BuilderprivateProductproduct=newProduct();publicoverridevoidBuildPartA()product.Add(PartX);publicoverridevoidBuildPartB()product.Add(PartY);publicoverrideProductGetResult()returnproduct;/ProductclassProductArrayListparts=newArrayList();publicvoidAdd(stringpart)parts.Add(part);publicvoidShow()Console.WriteLine(nProductParts-);foreach(stringpartinparts)Console.WriteLine(part);5.DoFactory.GangOfFour.Chain.StructuralChain of Responsibility:为解除请求的发送者和接收者之间的耦合,而使多个对象有机会处理这个请求。将这些请求连成一个链,并沿着这条链传递该请求,直到有个对象处理它。责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。usingSystem;namespaceDoFactory.GangOfFour.Chain.Structural/MainAppstartupclassforStructural/ChainofResponsibilityDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()/SetupChainofResponsibilityHandlerh1=newConcreteHandler1();Handlerh2=newConcreteHandler2();Handlerh3=newConcreteHandler3();h1.SetSuccessor(h2);h2.SetSuccessor(h3);/Generateandprocessrequestintrequests=2,5,14,22,18,3,27,20;foreach(intrequestinrequests)h1.HandleRequest(request);/WaitforuserConsole.Read();/HandlerabstractclassHandlerprotectedHandlersuccessor;publicvoidSetSuccessor(Handlersuccessor)this.successor=successor;publicabstractvoidHandleRequest(intrequest);/ConcreteHandler1classConcreteHandler1:HandlerpublicoverridevoidHandleRequest(intrequest)if(request=0&request=10&request=20&request30)Console.WriteLine(0handledrequest1,this.GetType().Name,request);elseif(successor!=null)successor.HandleRequest(request);6.DoFactory.GangOfFour.Command.StructuralCommand:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可以取消的操作。命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。usingSystem;namespaceDoFactory.GangOfFour.Command.Structural/MainAppstartupclassforStructural/CommandDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()/Createreceiver,command,andinvokerReceiverreceiver=newReceiver();Commandcommand=newConcreteCommand(receiver);Invokerinvoker=newInvoker();/Setandexecutecommandinvoker.SetCommand(command);invoker.ExecuteCommand();/WaitforuserConsole.Read();/CommandabstractclassCommandprotectedReceiverreceiver;/ConstructorpublicCommand(Receiverreceiver)this.receiver=receiver;publicabstractvoidExecute();/ConcreteCommandclassConcreteCommand:Command/ConstructorpublicConcreteCommand(Receiverreceiver):base(receiver)publicoverridevoidExecute()receiver.Action();/ReceiverclassReceiverpublicvoidAction()Console.WriteLine(CalledReceiver.Action();/InvokerclassInvokerprivateCommandcommand;publicvoidSetCommand(Commandcommand)mand=command;publicvoidExecuteCommand()command.Execute();7.DoFactory.GangOfFour.Composite.StructuralComposite:将对象组合成树形结构以表示“部分整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。usingSystem;usingSystem.Collections;namespaceDoFactory.GangOfFour.Composite.Structural/MainAppstartupclassforStructural/CompositeDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()/CreateatreestructureCompositeroot=newComposite(root);root.Add(newLeaf(LeafA);root.Add(newLeaf(LeafB);Compositecomp=newComposite(CompositeX);comp.Add(newLeaf(LeafXA);comp.Add(newLeaf(LeafXB);root.Add(comp);root.Add(newLeaf(LeafC);/AddandremovealeafLeafleaf=newLeaf(LeafD);root.Add(leaf);root.Remove(leaf);/Recursivelydisplaytreeroot.Display(1);/WaitforuserConsole.Read();/ComponentabstractclassComponentprotectedstringname;/ConstructorpublicComponent(stringname)=name;publicabstractvoidAdd(Componentc);publicabstractvoidRemove(Componentc);publicabstractvoidDisplay(intdepth);/CompositeclassComposite:ComponentprivateArrayListchildren=newArrayList();/ConstructorpublicComposite(stringname):base(name)publicoverridevoidAdd(Componentcomponent)children.Add(component);publicoverridevoidRemove(Componentcomponent)children.Remove(component);publicoverridevoidDisplay(intdepth)Console.WriteLine(newString(-,depth)+name);/Recursivelydisplaychildnodesforeach(Componentcomponentinchildren)component.Display(depth+2);/LeafclassLeaf:Component/ConstructorpublicLeaf(stringname):base(name)publicoverridevoidAdd(Componentc)Console.WriteLine(Cannotaddtoaleaf);publicoverridevoidRemove(Componentc)Console.WriteLine(Cannotremovefromaleaf);publicoverridevoidDisplay(intdepth)Console.WriteLine(newString(-,depth)+name);8.DoFactory.GangOfFour.Decorator.StructuralDecorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更加灵活。装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海西州公安局2025年面向社会公开招聘警务辅助人员146人考试备考题库及答案解析
- 2025安徽宁望创业投资有限责任公司人员招聘4人笔试模拟试题及答案解析
- 南康区机关事业单位2025年公开招聘编外人员【43人】笔试备考试题及答案解析
- 2025年金华武义县第一人民医院招聘人员12人考试参考题库附答案解析
- 2025浙江温州永嘉县国有企业面向社会招聘25人考试备考试题及答案解析
- 2025四川省绵阳第一中学第三次考核招聘教师9人笔试模拟试题及答案解析
- 2025西安医专附属医院8月招聘(41人)笔试备考题库及答案解析
- 2025广西桂林市兴安县帝禾牲畜屠宰有限公司招聘1人笔试模拟试题及答案解析
- 2025贵州六盘水市教育局招聘城镇公益性岗位笔试模拟试题及答案解析
- 2025四川川航航空发动机维修工程有限责任公司招聘1人笔试备考试题及答案解析
- 2024-2025学年广东省河源市小升初分班考试数学试卷(附答案解析)
- 《中国现代农业发展》课件
- 2024-2025学年九年级化学人教版教科书解读
- 《植物资源学》课件
- 交通运输概论教学教案
- 餐饮业的舆情管理
- 台达DELTA变频器VFD-EL系列使用说明书和手册(完整中文版)VFD007EL23A
- 《急性心肌梗死急诊》课件
- 中控室培训课件
- 产品研发流程指南
- 2025年中考语文复习之小题狂练300题(名著阅读):《艾青诗选》《水浒传》(10题)
评论
0/150
提交评论