定义:动态地给一个对象增加其他职责,就增加对象的功能来说,装饰模式比生成子类实现更为灵活。
UML图如下:
- 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象和抽象装饰器。
- 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。
- 抽象装饰(Decorator)角色:持有一个构件(Component)对象的实例,以用来对它进行装饰,并定义一个与抽象构件接口一致的接口。
- 具体装饰(Concrete Decorator)角色:负责给构件对象"加上"附加的功能。
-
- 结构图代码:
-
- interface Component
- {
- void Operation();
- }
-
- class ConcreteComponent : Component
- {
- public void Operation()
- {
- Console.WriteLine("ConcreteComponent Operation");
- }
- }
-
- abstract class Decorator : Component
- {
-
- protected Component comp;
-
- public Decorator(Component c)
- {
- this.comp = c;
- }
-
- public abstract void Operation();
- }
-
- class ConcreteDecoratorA : Decorator
- {
- private string addedState;
- public ConcreteDecoratorA(Component c) : base(c) { }
- public string AddedState
- {
- set
- {
- addedState = value;
- }
- }
-
- public override void Operation()
- {
- comp.Operation();
- Console.WriteLine("ConcreteDecoratorA Operation {0}",addedState);
- }
- }
-
- class ConcreteDecoratorB : Decorator
- {
- public ConcreteDecoratorB(Component c) : base(c) { }
- public override void Operation()
- {
- comp.Operation();
- Console.WriteLine("ConcreteDecoratorB Operation ");
- }
-
- public void AddedBehavior()
- {
- Console.WriteLine("This is Added Behavior");
- }
- }
- class Client
- {
- public static void Main()
- {
-
- ConcreteComponent cc = new ConcreteComponent();
- cc.Operation();
-
- ConcreteDecoratorA cda = new ConcreteDecoratorA(cc);
- cda.AddedState = "Decorator OK ";
- cda.Operation();
-
- ConcreteDecoratorB cdb = new ConcreteDecoratorB(cc);
- cdb.AddedBehavior();
- cdb.Operation();
-
- ConcreteDecoratorB cdbcda = new ConcreteDecoratorB(cda);
- cdbcda.Operation();
- }
- }
- Decorator与Component之间既是Is a...的继承关系,又是Has a...的组合关系。使用具体装饰类(ConcreteDecorator)来装饰具体构件对象(ConcreteComponent),装饰完的对象依旧是个Component类型。
Decorator模式解决的是类的功能的多向扩展,而不是单纯的类的继承。
Decorator模式提供了比继承更灵活的功能扩展,通过使用不同具体装饰对构件对象的排列组合地包装,能够不同功能的组合。
- 大小: 432.9 KB
分享到:
相关推荐
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
树形结构的处理——组合模式(二) 树形结构的处理——组合模式(三) 树形结构的处理——组合模式(四) 树形结构的处理——组合模式(五) 装饰模式-Decorator Pattern 扩展系统功能——装饰模式(一) 扩展系统...
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,同时保持对象的接口不变。这种模式的核心在于,它动态地将责任附加到对象上,通过将对象包装在一个装饰类中来扩展...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者模式(Observer Pattern)、责任链...
在"DecoratorPattern.rar"这个压缩包中,包含了装饰器模式的简单案例demo和一个使用MindMaster绘制的脑图。通过这个案例,我们可以深入理解装饰器模式的工作原理和应用场景。 1. 装饰器模式的基本结构: - ...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...
在《Element of Reusable Object-Oriented Software》中,GOF 对装饰器模式的用意进行了概述:Decorator Pattern――Attaches additional responsibilities to an object dynamically. Decorators provide a ...
装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的...通过阅读和实践 DecoratorPattern 文件中的示例代码,你可以更深入地理解装饰者模式的工作原理及其在实际项目中的应用。
- 装饰(Decorator):动态地给一个对象添加一些额外的职责,提供比继承更灵活的功能扩展。 - 代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**:关注对象之间的责任分配,如:...
7. **装饰器模式(Decorator)**:动态地给一个对象添加一些额外的职责。C++11的模板元编程和继承可以实现装饰器模式。 8. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。C++11的类型转换...