zoukankan      html  css  js  c++  java
  • 七.装饰模式

    装饰模式:

           为已有功能动态的添加更多的功能。

           如果没有抽象实体,装饰类直接继承实体。

           如果只有一个装饰实体,可以将装饰实体与抽象装饰类合并。???

    装饰类:

           //装饰类

       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 addedState;

           public override void Operation()

           {

               //运行基类的Operation方法,再执行本类功能

               //相当于对原类Component进行了装饰

               base.Operation();

               addedState = "New State";

               Console.WriteLine("具体装饰对象A的操作");

           }

        }

       class ConcreteDecoratorB : Decorator

        {

           public override void Operation()

           {

               base.Operation();

               AddedBehavior();

               Console.WriteLine("具体装饰对象B的操作");

           }

           public void AddedBehavior()

           {

               //本类独有的方法

               Console.WriteLine("B独有的方法");

           }

        }

    装饰类所装饰的实体:

           //抽象类,Component(组成,部件元件)

       abstract class Component

        {

           //(操作)

           public abstract void Operation();

        }

       //实体

       class ConcreteComponent : Component

        {

           public override void Operation()

           {

               Console.WriteLine("具体对象的操作");

           }

    }

    使用:

                         ConcreteComponentc = new ConcreteComponent();

               ConcreteDecoratorA d1 = new ConcreteDecoratorA();

               ConcreteDecoratorB d2 = new ConcreteDecoratorB();

               d1.Operation();

               d2.Operation();

               Console.WriteLine();

               d1.SetComponent(d2);

               d1.Operation();

  • 相关阅读:
    MySQL修改配置,区分大小写
    mvc中validateinput属性在asp.net4中不工作
    VS2010开发环境最佳字体及配色
    推荐19个很有用的 JavaScript 库
    Mysql limit 优化,百万至千万级快速分页,复合索引的引用并应用于轻量级框架
    C:\Windows\system32\MSVCR100.dll 没有被指定在 Windows 上运行,或者它包含错误。请尝试使用原始安装媒体重新安装程序,或联系您的系统管理员或软件供应商以获取支持。【解决办法】
    log4net配置步骤
    TraceSource记录程序日志
    [转] WPF TextBox控件中文字实现垂直居中
    SQL Server实现类似split功能
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815227.html
Copyright © 2011-2022 走看看