装饰模式(代码片段)

hyunbar hyunbar     2023-01-10     323

关键词:

前言

  装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

一、Component抽象类

1     public abstract class Component
2     
3         public abstract void Operationa();
4     

  Component 定义一个对象接口,可以给这些对象动态地添加职责

二、ConcreteComponent具体对象类

1     public class ConcreteComponent : Component
2     
3         public override void Operationa()
4         
5             Console.WriteLine("具体对象的操作");
6         
7     

  ConcreteComponent 定义了一个具体的对象,也可以给这个对象添加一些职责

三、Decorator装饰抽象类 

 1 
 2     abstract class Decorator : Component
 3     
 4         protected Component component;
 5 
 6         public void SetComponent(Component component)
 7         
 8             this.component = component;
 9         
10         public override void Operationa()
11         
12             if(component != null)
13             
14                 component.Operationa();
15             
16         
17     

  Decorator装饰抽象类,继承Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的

四、ConcreteDecorator具体的装饰对象

 1     class ConcreteDecoratorA : Decorator
 2     
 3         private string addedState;
 4         public override void Operationa()
 5         
 6             base.Operationa();
 7             addedState = "A New State";
 8             Console.WriteLine("具体装饰对象A的操作");
 9         
10     
11     class ConcreteDecoratorB : Decorator
12     
13         public override void Operationa()
14         
15             base.Operationa();
16             AddedBehavior();
17             Console.WriteLine("具体装饰对象B的操作");
18         
19 
20         private void AddedBehavior()
21         
22             //Console.WriteLine("B New State");
23         
24     

  ConcreteDecorator具体的装饰对象,起到给Component添加职责的功能。

五、运行

  

 1     class Program
 2     
 3         static void Main(string[] args)
 4         
 5             ConcreteComponent c = new ConcreteComponent();
 6             ConcreteDecoratorA a = new ConcreteDecoratorA();
 7             ConcreteDecoratorB b = new ConcreteDecoratorB();
 8 
 9             c.Operationa();
10             Console.WriteLine("===================");
11             a.SetComponent(c);
12             a.Operationa();
13             Console.WriteLine("===================");
14             b.SetComponent(a);
15             b.Operationa();
16 
17             Console.ReadKey();
18         
19     

  显示结果:

具体对象的操作
===================
具体对象的操作
具体装饰对象A的操作
===================
具体对象的操作
具体装饰对象A的操作
具体装饰对象B的操作

 

总结:

  1、装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

  2、使用:当系统需要新功能的时候,是向旧类中添加新的代码。这些新加的代码通常装饰了原类的核心职责或主要行为。

  在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。这些新加入的东西仅仅是为了满足一些只在某种特定的情况下才会执行的特殊行为的需要。而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中。

  因此,当需要执行特殊行为时,客户端代码就可以在运行时根据需要有选择的,按顺序的使用装饰功能包装对象。

  3、优点:把类中的装饰功能从类中移除,这样可以简化原有类。这样可以有效地把类的核心职责和装饰功能分开,而且可以去除相关类中的重复装饰逻辑。  

装饰模式(代码片段)

1.装饰模式装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。2.装饰模式的优点装饰者模式动态的给一个对象添... 查看详情

装饰器模式(代码片段)

一、模式名装饰者模式,Decorator二、解决的问题装饰者模式顾名思义,就是在原来的对象上加入一些修饰的部分,用以丰富原有对象的功能。但装饰器模式中的装饰器类和被装饰的对象保持一致,一般是继承或实现同一个父类或... 查看详情

decorator装饰模式(代码片段)

装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式的结构装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象... 查看详情

结构型模式之装饰模式(代码片段)

装饰模式(DecoratorPattern)是一种比较常见的模式。定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式类图如下所示。 装饰模式有以下4个角色。抽象构件(Component)角... 查看详情

装饰模式(代码片段)

...文章,摘抄自:2018黑马程序最新面试题汇总顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。1publicinterfaceISourceable23publicvoidme... 查看详情

设计模式之装饰模式(代码片段)

 设计模式之装饰模式   装饰模式(DecoratorPattern)是一种比较常见的模式,其定义如下:Attachadditionalresponsibilitestoanobjectdynamicallykeepingthesameinterface.Decoratorsprovideaflexiblealternativetosubclassingforexten 查看详情

设计模式——装饰者模式(代码片段)

目录问题描述版本(一)版本(二)——装饰者模式 1.版本(一)存在的缺点2.装饰者模式3.装饰者模式实现咖啡订单系统装饰者模式的应用——javaI/O 一个非常好的例子——编写自己的javaI/O装饰者问题描... 查看详情

装饰模式(代码片段)

一、何为装饰模式1.定义顾名思义,装饰模式就是为原有的对象添加不同的装饰,使得原有对象具备更加完善的功能。2.应用场合在原有代码基础上进行重构或者添加一些新的职责时,为了尽可能的不修改原有代码或者提高原有... 查看详情

装饰模式(代码片段)

前言  装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。一、Component抽象类1publicabstractclassComponent23publicabstractvoidOperationa();4  Component定义一个对象接口,可以给... 查看详情

装饰者模式(代码片段)

装饰者模式:动态给一个类新增一些新的行为。UML图:示例代码:publicabstractclassPhonepublicabstractvoidPrint();publicclassApplePhone:PhonepublicoverridevoidPrint()Console.WriteLine("我是苹果手机");publicclassDecoretor:Phoneprivat 查看详情

装饰者模式(代码片段)

 装饰者模式:动态的将额外的责任添加到对象上去,相对于继承,提供更加灵活的扩展方案。装饰者模式,有4个抽象的类概念:抽象构建类:被装饰对象的接口具体的构建类:被装饰的对象抽象装饰者:怎么进行装饰的接... 查看详情

装饰者模式(代码片段)

  装饰者模式(DecoratorPattern)动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。 /*装饰者模式*/classCarpublic:virtualvoidshow()=0;;classRunCar:publicCarpublic:virtualvoidshow()cout<<"可以跑"<<endl;;c... 查看详情

设计模式——6.装饰模式(代码片段)

装饰模式(Decorator)动态的为一个对象增加额外的职责,为对象增加功能时,使用装饰模式比单纯的子类继承要更加的灵活。装饰模式结构图:C++BaseClass对象抽象基类://file:BaseClass.h#pragmaonceclassBaseClasspublic:BaseClass();virtual~BaseClass(... 查看详情

装饰者模式(代码片段)

装饰者模式:  动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性地替代方案  关键: 装饰者和被装饰者都继承同一个对象, 装饰者继承并不是为了获得父类地行为,而是达到类型匹配地目的  通... 查看详情

装饰器模式(代码片段)

1介绍:1.1概念:装饰器模式允许向一个现有的对象添加新功能,同时又不改变其结构。这种模式创建了一个装饰类,来包装原有的类,在保证方法签名完整的情况下,添加了额外的功能。1.2优缺点:   优点:装饰类... 查看详情

装饰者模式(代码片段)

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。和代理模式很相似,但在对被装饰的对象的控制程度是不同的;装饰者模式是对对象功能的加强,而代理模式是对对象施加控制... 查看详情

设计模式——装饰者模式(代码片段)

-什么是装饰者模型装饰者模型通过组合的方式扩展对象的特性,动态地给对象添加额外的职责。在增加功能上,装饰模式比生成子类更加灵活。-职责划分Component抽象构建,是接口或者抽象类,就是定义原始对象。ConcreteComponent... 查看详情

装饰者模式(代码片段)

...设计模式》和《HeadFirst设计模式》两本书边练边学,学到装饰者模式的时候,死活理解不了装饰者模式是怎么调用的,最后搜索了很多资料,才搞明白装饰者模式是怎么层层调用的。下面先贴下代码1.WearClothes/***穿衣服*装饰者模... 查看详情