WEB开发网
开发学院软件开发C语言 C# Design Patterns (3) - Decorator 阅读

C# Design Patterns (3) - Decorator

 2009-06-29 07:07:51 来源:WEB开发网   
核心提示: 图 1此图为 Decorator 模式的经典 Class Diagram01_Shell / Program.csusingSystem;namespace_01_Shell{//客户端程序classProgram{staticvoidMain(string[]args){Concrete

C# Design Patterns (3) - Decorator

图 1 此图为 Decorator 模式的经典 Class Diagram

01_Shell / Program.cs
using System;

namespace _01_Shell
{
    //客户端程序
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            //让 ConcreteDecorator 在运行时,动态地给 ConcreteComponent 增加职责
            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();

            Console.Read();
        }
    }

    //装饰者、被装饰者的共同基类
    abstract class Component
    {
        public abstract void Operation();
    }

    //被装饰者。具体被装饰对象。
    //此为在「执行」时期,会被 ConcreteDecorator 具体装饰者,「动态」添加新行为(职责)的对象
    class ConcreteComponent : Component
    {
        public override void Operation()
        {
            Console.WriteLine("具体被装饰对象的操作");
        }
    }

    //装饰者。
    //此为所有装饰者,应共同实现的抽象类或接口
    abstract class Decorator : Component
    {
        //以父类声明的字段。
        //实现 UML Class Diagram 的 Aggregation,指向 Component 对象的指针。
        protected Component component;

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

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

    //具体装饰者 A
    //此为在「执行」时期,替 ConcreteComponent「动态」添加新行为(职责)的对象
    class ConcreteDecoratorA : Decorator
    {
        //装饰者可以添加新的栏位
        private string addedState;

        public override void Operation()
        {
            base.Operation();
            addedState = "New State";
            Console.WriteLine("具体装饰对象 A 的操作");
        }
    }

    //具体装饰者 B
    //此为在「执行」时期,替 ConcreteComponent「动态」添加新行为(职责)的对象
    class ConcreteDecoratorB : Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("具体装饰对象 B 的操作");
        }

        //装饰者可以添加新的方法
        private void AddedBehavior()
        {
        }
    }

} // end of namespace


/*
执行结果:

具体被装饰对象的操作
具体装饰对象 A 的操作
具体装饰对象 B 的操作

*/

上一页  1 2 3 4 5 6 7  下一页

Tags:Design Patterns Decorator

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接