今天看啥
    热点:

      天发国际娱乐官网:根据这份最新报告,瑞士、挪威、瑞典、丹麦和法国位列全球能源架构绩效指数榜单前五位。

      装饰模式--Decorator pattern,--decoratorpattern


      定义:动态地给一个对象增加其他职责,就增加对象的功能来说,装饰模式比生成子类实现更为灵活。

      UML图如下:



       

      Code:
      1. 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象和抽象装饰器。   
      2. 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。   
      3. 抽象装饰(Decorator)角色:持有一个构件(Component)对象的实例,以用来对它进行装饰,并定义一个与抽象构件接口一致的接口。   
      4. 具体装饰(Concrete Decorator)角色:负责给构件对象"加上"附加的功能。  
      5.   
      6. 结构图代码:  
      7.     //抽象构件,定义了具体构件和抽象装饰要实现的方法  
      8.     interface Component  
      9.     {  
      10.         void Operation();  
      11.     }  
      12.     //定义具体构件  
      13.     class ConcreteComponent : Component  
      14.     {  
      15.         public void Operation()  
      16.         {  
      17.             Console.WriteLine("ConcreteComponent Operation");  
      18.         }  
      19.     }  
      20.     //定义抽象装饰者。抽象装饰者也实现了抽象构件的接口  
      21.     abstract class Decorator : Component  
      22.     {  
      23.         //把一个抽象构件作为抽象装饰的成员变量。  
      24.         protected Component comp;  
      25.        //在抽象装饰者的构造函数中为抽象构件初始化。   
      26.         public Decorator(Component c)  
      27.         {  
      28.             this.comp = c;  
      29.         }  
      30.        //还未实现的接口的方法。   
      31.         public abstract void Operation();  
      32.     }  
      33.     //具体装饰者A,继承自抽象装饰。  
      34.     class ConcreteDecoratorA : Decorator  
      35.     {  
      36.         private string addedState; //具体装饰者中新增的成员变量  
      37.         public ConcreteDecoratorA(Component c) : base(c) { }  
      38.         public string AddedState   //具体装饰者中新增的属性  
      39.         {  
      40.             set  
      41.             {  
      42.                 addedState = value;  
      43.             }  
      44.         }  
      45.        //具体装饰者实现了接口中定义的方法   
      46.         public override void Operation()  
      47.         {  
      48.             comp.Operation();    //可以调用原构件对象的Operation方法。  
      49.             Console.WriteLine("ConcreteDecoratorA Operation {0}",addedState);  
      50.         }  
      51.     }  
      52.     //具体装饰者B,继承自抽象装饰。  
      53.     class ConcreteDecoratorB : Decorator  
      54.     {  
      55.         public ConcreteDecoratorB(Component c) : base(c) { }  
      56.         public override void Operation()  
      57.         {  
      58.             comp.Operation(); //可以调用原构件对象的Operation方法。  
      59.             Console.WriteLine("ConcreteDecoratorB Operation ");  
      60.         }  
      61.        // 具体装饰者实现了接口中定义的方法   
      62.         public void AddedBehavior()  
      63.         {  
      64.             Console.WriteLine("This is Added Behavior");  
      65.         }  
      66.     }  
      67.     class Client  
      68.     {  
      69.         public static void Main()  
      70.         {  
      71.             //原生的具体构件   
      72.             ConcreteComponent cc = new ConcreteComponent();  
      73.             cc.Operation();  
      74.             //把原生的具体构件用具体装饰者A进行一次包装  
      75.             ConcreteDecoratorA cda = new ConcreteDecoratorA(cc);  
      76.             cda.AddedState = "Decorator OK ";  
      77.             cda.Operation();  
      78.            //把原生的具体构件用具体装饰者B进行一次包装   
      79.             ConcreteDecoratorB cdb = new ConcreteDecoratorB(cc);  
      80.             cdb.AddedBehavior();  
      81.             cdb.Operation();  
      82.            //把被A包装完的具体构件再用用具体装饰者B进行二次包装   
      83.             ConcreteDecoratorB cdbcda = new ConcreteDecoratorB(cda);  
      84.             cdbcda.Operation();  
      85.         }  
      86.     }  
      87.  Decorator与Component之间既是Is a...的继承关系,又是Has a...的组合关系。使用具体装饰类(ConcreteDecorator)来装饰具体构件对象(ConcreteComponent),装饰完的对象依旧是个Component类型。
            Decorator模式解决的是类的功能的多向扩展,而不是单纯的类的继承。
            Decorator模式提供了比继承更灵活的功能扩展,通过使用不同具体装饰对构件对象的排列组合地包装,能够不同功能的组合。

       

      www.1click-soft.comtrue/article/20180111/207451.htmlTechArticle装饰模式--Decorator pattern,--decoratorpattern 定义:动态地给一个对象增加其他职责,就增加对象的功能来说,装饰模式比生成子类实现更为灵活。 UML图如下: Code: 抽象构件(Component)角色...

      相关文章

        暂无相关文章
      相关搜索: 设计模式

      帮客评论

      视觉看点
      百度 360 搜狗