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

    装饰模式(Decorator):
    动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace ConsoleApplication1
     7 {
     8     class Person
     9     {
    10         private string name;
    11 
    12         public Person()
    13         { }
    14 
    15         public Person(string name)
    16         {
    17             this.name = name;
    18         }
    19 
    20         public virtual void Show()
    21         {
    22             Console.Write(" Decorated " + this.name);
    23         }
    24     }
    25 
    26     class Finery: Person
    27     {
    28         private Person person;
    29 
    30         public void SetDecoration(Person person)
    31         {
    32             this.person = person;
    33         }
    34 
    35         public override void Show()
    36         {
    37             if(this.person != null)
    38             {
    39                 this.person.Show();
    40             }
    41         }
    42     }
    43 
    44     class Sneaker: Finery
    45     {
    46         public override void Show()
    47         {
    48             Console.Write(" Sneaker ");
    49 
    50             base.Show();
    51         }
    52     }
    53 
    54     class Jeans : Finery
    55     {
    56         public override void Show()
    57         {
    58             Console.Write(" Jeans ");
    59 
    60             base.Show();
    61         }
    62     }
    63 
    64     class WhiteTshirt : Finery
    65     {
    66         public override void Show()
    67         {
    68             Console.Write(" White Tshirt ");
    69 
    70             base.Show();
    71         }
    72     }
    73 
    74     class Program
    75     {
    76         static void Main(string[] args)
    77         {
    78             Person jim = new Person("Jim");
    79             Sneaker sneaker = new Sneaker();
    80             Jeans jeans = new Jeans();
    81             WhiteTshirt whiteTshirt = new WhiteTshirt();
    82 
    83             sneaker.SetDecoration(jim);
    84             jeans.SetDecoration(sneaker);
    85             whiteTshirt.SetDecoration(jeans);
    86 
    87             whiteTshirt.Show();
    88 
    89             Console.ReadLine();
    90         }
    91     }
    92 }

    装饰模式是为自己已有功能动态添加更多功能的一种方式。

    优点:把类中装饰功能从类中搬移出去,这样可以简化原有的类。这样可以有效的把核心功能和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

  • 相关阅读:
    34. 在排序数组中查找元素的第一个和最后一个位置
    153. 寻找旋转排序数组中的最小值
    278. 第一个错误的版本
    540. 有序数组中的单一元素
    744. 寻找比目标字母大的最小字母
    69. x 的平方根
    763. 划分字母区间
    53. 最大子序和
    665. 非递减数列
    Zabbix探索:Agent配置中Hostname错误引起的Agent.Ping报错
  • 原文地址:https://www.cnblogs.com/zzunstu/p/9298319.html
Copyright © 2011-2022 走看看