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();

  • 相关阅读:
    阿里巴巴2015年校招笔试附加题
    hadoop eclipse插件生成
    DevExpress控件的安装及画图控件的使用
    计算二进制数的0的个数
    Docker初探
    AppStore App申请审核加速
    _DataStructure_C_Impl:LinkListBasedSort
    rman数据库恢复;关键/非重要文件、影像副本、控制文件、还原点、非归档、增量、新数据库、灾难性回复
    RenderScript on LLVM笔记
    Oracle数据库备份恢复,巡检须要关注的对象设置以及相关恢复概述
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815227.html
Copyright © 2011-2022 走看看