Decorator Pattern属于Structural Patterns
介绍:
Decorator pattern的作用是提供一种方式动态的给一个对象添加新的职责或状态,被装饰的对象并不知道被“装饰”了。A key implementation point in the Decorator pattern is that decorators both inherit the original class and contain an instantiation of it.
实现:
UML 类图
public interface IComponent
{
string Operation();
}
/// <summary>
/// 被装饰者
/// </summary>
public class Component : IComponent
{
#region IComponent Members
public string Operation()
{
return "I'm a photo;";
}
#endregion
}
/// <summary>
/// 装饰者A
/// </summary>
public class DecoratorA : IComponent
{
IComponent component;
public DecoratorA(IComponent component)
{
this.component = component;
}
#region IComponent Members
public string Operation()
{
return component.Operation() + "and decorated by DecoratorA";
}
#endregion
}
/// <summary>
/// 装饰者B
/// </summary>
public class DecoratorB : IComponent
{
IComponent component;
public string AddedState = " and added state";
public DecoratorB(IComponent component)
{
this.component = component;
}
#region IComponent Members
public string Operation()
{
return component.Operation() + "and decorated by DecoratorB";
}
public string AddedBehavior()
{
return " and added behavior by DecoratorB";
}
#endregion
}
public class Client
{
public static void Display(string s, IComponent component)
{
Console.WriteLine(s + component.Operation());
}
}
[TestFixture]
public class DecoratorTest
{
[Test]
public void T1()
{
var component = new Component();
Client.Display(string.Empty, component);
var decoratorB = new DecoratorB(component);
Client.Display("hello!", decoratorB);
}
}