• 设计模式 装饰模式


    装饰模式(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();
            }
    装饰模式具体实现
  • 相关阅读:
    css样式之补充
    css样式之属性操作
    css之操作属性
    前端基础之css样式(选择器)
    mysql之视图,触发器,事务等
    pymysql模块
    MySQL之IDE工具介绍及数据备份
    mysql老是停止运行该怎么解决
    mysql之索引原理与慢查询优化
    MySQL 5.7.9版本sql_mode=only_full_group_by问题
  • 原文地址:https://www.cnblogs.com/YuanSong/p/4162740.html
Copyright © 2020-2023  润新知