标签:style blog http io ar 使用 sp for 文件
装饰者模式也是在编码设计中使用非常频繁的设计模式之一,尤其是在AOP等应用上尤其突出。今天就重新回顾一下装饰者模式
装饰者模式,在不改变原类文件和使用继承的情况下,动态扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰者模式具备以下特点:
抽象真实对象
public interface IComponent { void Operation(); }
具体真实对象
public class Component : IComponent { public void Operation() { Console.WriteLine("Component Operation"); } }
抽象装饰者
public abstract class Decorator : IComponent { protected IComponent realComponent; public Decorator(IComponent component) { realComponent = component; } public virtual void Operation() { if (realComponent != null) realComponent.Operation(); } }
日志装饰者
public class LogDecorator : Decorator { public LogDecorator(IComponent component) : base(component) { } public override void Operation() { Console.WriteLine("Operation Logging"); base.Operation(); Console.WriteLine("Operation Log Finished"); } }
授权装饰者
public class AuthDecorator : Decorator { public AuthDecorator(IComponent component) : base(component) { } public override void Operation() { Console.WriteLine("Befor Operation Authorization"); base.Operation(); Console.WriteLine("After Operation Authorization"); } }
测试代码
class Program { static void Main(string[] args) { IComponent component = new AuthDecorator( new LogDecorator( new Component() )); component.Operation(); Console.ReadLine(); } }
本篇只是介绍装饰者模式,不具备权威性,代码也只是作为演示使用,具体的使用还是仁者见仁智者见智,看具体场景而发挥。其实从接口的间接调用来说,装饰者模式有点像适配器模式又有点像是代理模式,这里面的联系和区别以后可以展开讨论
标签:style blog http io ar 使用 sp for 文件
原文地址:http://www.cnblogs.com/fecktty2013/p/designpatterns-decorator.html