结构型设计模式之装饰模式

结构
意图 动态地给一个对象添加一些额外的职责。就增加功能来说,D e c o r a t o r 模式相比生成子类更为灵活。
适用性
  • 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
  • 处理那些可以撤消的职责。
  • 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

 1 using System;
 2
 3     abstract class Component
 4     {
 5         public abstract void Draw();
 6     }
 7
 8     class ConcreteComponent : Component
 9     {
10         private string strName;
11         public ConcreteComponent(string s)
12         {
13             strName = s;
14         }
15
16         public override void Draw()
17         {
18             Console.WriteLine("ConcreteComponent - {0}", strName);
19         }
20     }
21
22     abstract class Decorator : Component
23     {
24         protected Component ActualComponent;
25
26         public void SetComponent(Component c)
27         {
28             ActualComponent = c;
29         }
30         public override void Draw()
31         {
32             if (ActualComponent != null)
33                 ActualComponent.Draw();
34         }
35     }
36
37     class ConcreteDecorator : Decorator
38     {
39         private string strDecoratorName;
40         public ConcreteDecorator (string str)
41         {
42             // how decoration occurs is localized inside this decorator
43             // For this demo, we simply print a decorator name
44             strDecoratorName = str;
45         }
46         public override void Draw()
47         {
48             CustomDecoration();
49             base.Draw();
50         }
51         void CustomDecoration()
52         {
53             Console.WriteLine("In ConcreteDecorator: decoration goes here");
54             Console.WriteLine("{0}", strDecoratorName);
55         }
56     }
57
58
59     /// <summary>
60     ///    Summary description for Client.
61     /// </summary>
62     public class Client
63     {
64         Component Setup()
65         {
66             ConcreteComponent c = new ConcreteComponent("This is the real component");
67
68             ConcreteDecorator d = new ConcreteDecorator("This is a decorator for the component");
69
70             d.SetComponent(c);
71
72             return d;
73         }
74
75         public static int Main(string[] args)
76         {
77             Client client = new Client();
78             Component c = client.Setup();
79
80             // The code below will work equally well with the real component,
81             // or a decorator for the component
82
83             c.Draw();
84
85             return 0;
86         }
87     }

装饰模式

时间: 2024-08-04 03:34:58

结构型设计模式之装饰模式的相关文章

结构型设计模式对比 设计模式(十六)

结构型设计模式 结构型模式关注于整体最终的结构,通过继承和组合,构建出更加复杂的结构 进而提供更加强大的逻辑功能 七种结构型模式 适配器模式(Adapter Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 代理模式(Proxy Pattern) 桥接模式(Bridge Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 所有的结构型设计模式在逻辑上都各自不同程度的隐含了“间

&quot;围观&quot;设计模式(30)--结构型设计模式总结(适配器、代理、装饰、外观、桥梁、组合、享元)

设计模式代码下载地址 设计模式代码下载地址 1  适配器模式 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper).将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中.----WIKIPEDIA 个人理解 适配器模式:将两个不一致或者说无法直接使用的类或者接口通过适配器模式进行兼容,使得他们可以在一块使用.适配器模式在之前的项目中我是用于处理数据的不兼容的,对

7 结构型模式之 - 装饰模式

装饰模式介绍:装饰模式也称为包装模式,是结构型模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一.在现实生活中你也可以看见很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本质来说是不变的,充其量只是在外面披上一层包装而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的. 装饰模式的定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更加灵

结构型模式之装饰模式

概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框. 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系.在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有

设计模式_结构型模式_装饰模式

a) 装饰模式定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. b) 代码: i. Component类: Abstract class Component{ public abstract void Operation(); } ii. Class ConcreteComponent类: class ConcreteComponent:Component{ Public override void Operation(){ Console.WriteLin

java语言实现结构型设计模式—外观模式

一.描述 外观模式又叫门面模式,就是对一个复杂的系统进行包装,该系统对外的接口统一由外观类提供.当一个复杂的系统需要对外提供接口时,就需要将对外提供的接口统一封装在一个外观类中供外系统使用.外观模式最大的特点就是将细粒度的对象包装成粗粒度的对象,应用程序通过访问这个外观对象来完成细粒度对象的调用.这样应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 总的来说,外观模式就是为子系统对外提供的一组接口,这组接口提供一个统一的界面,使得其它

结构型设计模式

1.享元模式 2.外观模式 3.组合模式 4.桥梁模式 5.装饰模式 6.代理模式 7.适配器模式

10结构型模式之装饰模式

概念   装饰( Decorator )模式又叫做包装模式.通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案. 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地.按顺序地使用装饰功能包装对象. 类图角色和职责 适用于: 装饰者模式(Decorator Pattern)动态的给一个对象添加一些额外的职责.就增加功能来说,此模式比生成子类更为灵活. 案例 //给跑车,额外添加游泳.飞行的功能 #include <i

结构型设计模式 之 适配器模式

一.介绍 我们看一下<研磨设计模式>中的定义: 将一个类的接口转换成客户希望的另一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器模式的本质是——转换匹配,复用功能. 怎么理解呢?就是说,新的接口需要实现的功能,旧的接口现在都有,问题是,怎么把旧的接口的实现类拿去实现新的接口. 方法很简单,那就是把旧接口的实现类放到适配器中,可以作为成员变量,也可以作为局部变量,只要能使用都可以.然后适配器实现新的接口,在适配器@Overide的方法中,调用旧接口的实现类去