装饰(Decorator)模式又名包装(Wrapper)模式[GOF95]。装饰模式以对客户端透明的方 式扩展对象的功能,是继承关系的一个替代方案。

装饰模式类图:

十、装饰(Decorator)模式 --结构模式(Structural Pattern)

类图说明:

抽象构件(Component)角色:给出一个抽象接口,以 规范准备接收附加责任的对象。  

具体构件(Concrete Component)角色:定义一个将 要接收附加责任的类。 

装饰(Decorator)角色:持有一个构件(Component) 对象的实例,并定义一个与抽象构件接口一致的接口。  

具体装饰(Concrete Decorator)角色:负责给构件对 象"贴上"附加的责任

示例代码:

    class Program
    {
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent();
            ConcreteDecoratorA decoratorA = new ConcreteDecoratorA();
            ConcreteDecoratorB decoratorB = new ConcreteDecoratorB();

            decoratorA.SetComponent(component);
            decoratorB.SetComponent(decoratorA);

            decoratorB.Operation();
            Console.ReadKey();

        }
    }

    abstract class Component
    {
        public abstract void Operation();
    }

    class ConcreteComponent : Component
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreteComponent.OPeration");
        }
    }

    abstract class Decorator : Component
    {
        protected Component compontent;

        public void SetComponent(Component compontent)
        {
            this.compontent = compontent;
        }

        public override void Operation()
        {
            if (compontent != null)
            {
                compontent.Operation();
            }
        }
    }

    class ConcreteDecoratorA : Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("ConcreteDecoratorA.Operation()");
        }

        void AddedBehavior()
        {

        }
    }

    class ConcreteDecoratorB : Decorator
    {   // Methods   
        override public void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("ConcreteDecoratorB.Operation()");
        }
        void AddedBehavior() { }
    }
View Code

相关文章: