23种设计模式_UML_类图

上传人:仙*** 文档编号:163843230 上传时间:2022-10-23 格式:DOCX 页数:57 大小:345.10KB
返回 下载 相关 举报
23种设计模式_UML_类图_第1页
第1页 / 共57页
23种设计模式_UML_类图_第2页
第2页 / 共57页
23种设计模式_UML_类图_第3页
第3页 / 共57页
点击查看更多>>
资源描述
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)this.name=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模式比生成子类方式更加灵活。装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。usingSystem;namespaceDoFactory.GangOfFour.Decorator.Structural/MainAppstartupclassforStructural/DecoratorDesignPattern./classMainApp/Entrypointintoconsoleapplication./staticvoidMain()/CreateConcreteComponentandtwoDecoratorsConcreteComponentc=newConcreteComponent();ConcreteDecoratorAd1=newConcreteDecoratorA();ConcreteDecoratorBd2=newConcreteDecoratorB();/Linkdecoratorsd1.SetComponent(c);d2.SetComponent(d1);d2.Operation();/WaitforuserConsole.Read();/ComponentabstractclassComponentpublicabstractvoidOperation();/ConcreteComponentclassConcreteComponent:ComponentpublicoverridevoidOperation()Console.WriteLine(ConcreteComponent.Operation();/DecoratorabstractclassDecorator:ComponentprotectedComponentcomponent;publicvoidSetComponent(Componentcomponent)ponent=component;publicoverridevoidOperation()if(component!=null)component.Operation();/ConcreteDecoratorAclassConcreteDecoratorA:DecoratorprivatestringaddedState;publicoverridevoidOperation()base.Operation();addedState=NewState;Console.WriteLine(ConcreteDecoratorA.Operation();/ConcreteDecoratorBclassConcreteDecoratorB:Deco
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!