您的位置:首页 > 移动开发

Design patterns IV : Decorator/Wrapper Pattern

2013-06-08 01:55 288 查看
/*

Author: Jiangong SUN

*/

Decorators provide a flexible alternative to subclassing for extending functionality.

public class DecoratorPattern
{
/*
* decorator和wrapper是一个设计模式
* 用途:用来扩展已有类的功能
* 实现步骤:
* 先定义一个interface,然后建立一个类继承这个接口,并实现接口里的方法
* 建立一个包装类继承同一个接口,并在这个包装类的构造器中使用接口的实例做参数。
* 建立实际包装类继承包装类,重写接口定义的方法,并可以创建自己特有的方法。
*/
public interface IComponent
{
void Operation();
}

public class ConcreteComponent : IComponent
{
public void Operation()
{
Console.WriteLine("ConcreteComponent operation");
}
}

public class Decorator : IComponent
{
private readonly IComponent _decoratedComponent;

public Decorator(IComponent iComponent)
{
_decoratedComponent = iComponent;
}

public void Operation()
{
_decoratedComponent.Operation();
}
}

public class ConcreteDecoratorA : Decorator
{
private string _addState;

public ConcreteDecoratorA(Decorator decorator)
: base(decorator)
{
}

public new void Operation()
{
base.Operation();
_addState = "New State";
Console.WriteLine("ConcreteDecoratorA.Operation");
}
public void CustomOperation()
{
Console.WriteLine("ConcreteDecoratorA custom Operation");
}
}

public static void Main()
{
ConcreteComponent concreteComponent = new ConcreteComponent();
concreteComponent.Operation();

Decorator decorator = new Decorator(concreteComponent);
ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA(decorator);
concreteDecoratorA.Operation();
concreteDecoratorA.CustomOperation();

Console.ReadKey();
}
}


reference:
http://en.wikipedia.org/wiki/Decorator_pattern http://geekswithblogs.net/amaniar/archive/2012/02/10/a-simple-implementation-of-the-decorator-design-pattern-using-c-sharp.aspx http://sourcemaking.com/design_patterns/decorator/c%2523 http://www.dofactory.com/Patterns/PatternDecorator.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: