一、定义:

装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

 简单来说,装饰模式非常类似于继承,都能给对象添加一些额外的职责。如果需要灵活的添加一组有相对排列序列的功能,单纯的继承实现则显得不是那么优雅,装饰模式可以恰当的实现。

二、UML类图:

设计模式(7)---装饰模式

 

三、基本代码

class Program
    {
        static void Main(string[] args)
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();

            Console.Read();
        }
    }

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

    class ConcreteComponent : Component
    {
        public override void Operation()
        {
            Console.WriteLine("具体对象的操作");
        }
    }

    abstract class Decorator : Component
    {
        protected Component component;

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

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

    class ConcreteDecoratorA : Decorator
    {
        private string addState;

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

    class ConcreteDecoratorB : Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddBehavior();
            Console.WriteLine("具体装饰对象B的操作");
        }

        private void AddBehavior()
        {
            Console.WriteLine("B 的穿衣");
        }
    }
View Code

相关文章:

  • 2022-01-15
  • 2021-06-28
  • 2021-07-15
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2021-07-03
  • 2022-01-10
  • 2022-01-05
  • 2022-12-23
  • 2021-12-01
  • 2021-03-30
相关资源
相似解决方案