zoukankan      html  css  js  c++  java
  • 设计模式 装饰模式

    装饰模式(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();
            }
    装饰模式具体实现
  • 相关阅读:
    使用控制结构——循环语句——基本循环
    oracle字符类型 char,varchar2,varchar,clob,nvarchar,nclob
    使用控制结构——条件分支语句——多重条件分支
    hduoj 1518square
    运算符重载实现复数的加减乘除
    使用游标——参数游标
    开发PL/SQL子程序——触发器——编译触发器,删除触发器,显示触发器
    NYOJ58最少步数
    使用控制结构——条件分支语句——简单条件
    开发PL/SQL子程序——触发器——使用触发器注意事项
  • 原文地址:https://www.cnblogs.com/YuanSong/p/4162740.html
Copyright © 2011-2022 走看看