• 设计模式 装饰模式


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

    “在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。”

    装饰模式是为已有功能动态的添加更过功能的一种方式,比继承更加灵活,通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。但是会出现小类,增加程序的复杂性。

        //对象 可以给这些对象动态的添加职责
       /// <summary>
        /// 对象接口
       /// </summary>
        abstract class Component
        {
            public abstract void Operation();
        }
        /// <summary>
        /// 具体的对象
        /// </summary>
        class ConcreteComponent : Component
        {
            public override void Operation()
            {
                Console.WriteLine("具体对象的操作");
            }
        }
    对象 可以给这些对象动态的添加职责
        /// <summary>
        /// 装饰类抽象类 继承被装饰对象  从外类扩展被装饰对象的功能
        /// </summary>
        abstract class Decorator : Component
        {
            protected Component component;
    
            public void SetComponent(Component component)
            {
                this.component = component;
            }
    
            public override void Operation()
            {
                if (component != null)
                {
                    component.Operation();
                }
            }
        }
    装饰类抽象类
        /// <summary>
        /// 具体装饰对象A 为被装饰对象添加职责
       /// </summary>
        class ConcreteDecoratorA : Decorator
        {
            private string addedState;
    
            public override void Operation()
            {
                base.Operation();
                addedState = "New State";
                Console.WriteLine("具体装饰对象A的操作");
            }
        }
        /// <summary>
        /// 具体装饰对象B 为被装饰对象添加职责
       /// </summary>
        class ConcreteDecoratorB : Decorator
        {
    
            public override void Operation()
            {
                base.Operation();
                AddedBehavior();
                Console.WriteLine("具体装饰对象B的操作");
            }
    
            private void AddedBehavior()
            {
                Console.WriteLine("具体装饰对象B独有的操作");
            }
        }
    具体装饰对象
            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();
            }
    装饰模式具体实现
  • 相关阅读:
    属性的自动完成
    二十七、详测 Generics Collections TDictionary(3): TPairEnumerator、TKeyEnumerator、TValueEnumerator、ExtractPair
    Delphi 反转内存的函数
    类方法调用
    九、泛型排序器 TComparer
    十九、详测 Generics Collections TList (10): OnNotify 事件
    二十、详测 Generics Collections TList (11): Create
    二十一、详测 Generics Collections TQueue (1): Enqueue、Dequeue、Peek
    十四、详测 Generics Collections TList (5): Move、Exchange
    二十二、详测 Generics Collections TQueue (2): Create、Count、Clear、TrimExcess
  • 原文地址:https://www.cnblogs.com/YuanSong/p/4162740.html
Copyright © 2020-2023  润新知