设计模式笔记(四) —— 装饰模式

来源:互联网 发布:可牛闪图软件下载 编辑:程序博客网 时间:2024/06/16 02:03

装饰模式(Decorator):装饰模式是为已有功能动态的添加更多功能的一种方式。

  1. using System;
  2. namespace StuDesignMode.Decorator
  3. {
  4.     public class AbsCustomer
  5.     {
  6.         public string Name
  7.         {
  8.             get;
  9.             set;
  10.         }
  11.         public AbsCustomer() { }
  12.         public AbsCustomer(string name)
  13.         {
  14.             this.Name = name;
  15.         }
  16.         public virtual void Show()
  17.         {
  18.             Console.WriteLine("装扮的{0}"this.Name);
  19.         }
  20.     }
  21.     /// <summary>
  22.     /// 人
  23.     /// </summary>
  24.     public class Person:AbsCustomer
  25.     {
  26.         public Person(string name)
  27.         {
  28.             base.Name = name;
  29.         }
  30.         
  31.     }
  32.     /// <summary>
  33.     /// 猫
  34.     /// </summary>
  35.     public class Cat : AbsCustomer
  36.     { 
  37.         public Cat(string name)
  38.         {
  39.             base.Name = name;
  40.         }
  41.     }
  42.     /// <summary>
  43.     /// 服饰
  44.     /// </summary>
  45.     class Finery :AbsCustomer
  46.     {
  47.         private AbsCustomer _component;
  48.         /// <summary>
  49.         /// 打扮
  50.         /// </summary>
  51.         /// <param name="component"></param>
  52.         public void Decorate(AbsCustomer component)
  53.         {
  54.             this._component = component;
  55.         }
  56.         public override void Show()
  57.         {
  58.             if (this._component != null)
  59.             {
  60.                 this._component.Show();       
  61.             }
  62.         }
  63.     }
  64.     /// <summary>
  65.     /// T恤
  66.     /// </summary>
  67.     class TShirts : Finery
  68.     {
  69.         public override void Show()
  70.         {
  71.             Console.Write("大T恤 ");
  72.             base.Show();
  73.         }
  74.     }
  75.     /// <summary>
  76.     /// 垮裤
  77.     /// </summary>
  78.     class BigTrouser : Finery
  79.     {
  80.         public override void Show()
  81.         {
  82.             Console.Write("垮裤 ");
  83.             base.Show();
  84.         }
  85.     }
  86.     /// <summary>
  87.     /// 破球鞋
  88.     /// </summary>
  89.     class BrokenShoes : Finery
  90.     {
  91.         public override void Show()
  92.         {
  93.             Console.Write("破球鞋 ");
  94.             base.Show();
  95.         }
  96.     }
  97.     /// <summary>
  98.     /// 西装
  99.     /// </summary>
  100.     class Suit : Finery
  101.     {
  102.         public override void Show()
  103.         {
  104.             Console.Write("西装 ");
  105.             base.Show();
  106.         }
  107.     }
  108.     /// <summary>
  109.     /// 领带
  110.     /// </summary>
  111.     class Tie : Finery
  112.     {
  113.         public override void Show()
  114.         {
  115.             Console.Write("领带 ");
  116.             base.Show();
  117.         }
  118.     }
  119.     /// <summary>
  120.     /// 皮鞋
  121.     /// </summary>
  122.     class LeatherShoes : Finery
  123.     {
  124.         public override void Show()
  125.         {
  126.             Console.Write("皮鞋 ");
  127.             base.Show();
  128.         }
  129.     }
  130.     class ClientTest
  131.     {
  132.         static void Main(string[] args)
  133.         {
  134.             AbsCustomer xc = new Person("小菜");
  135.             Console.WriteLine("/n第一种装扮:");
  136.             TShirts ts = new TShirts();
  137.             BigTrouser bt = new BigTrouser();
  138.             BrokenShoes bs = new BrokenShoes();
  139.             //装饰过程
  140.             ts.Decorate(xc);
  141.             bt.Decorate(ts);
  142.             bs.Decorate(bt);
  143.             bs.Show();
  144.             Console.WriteLine("/n第二种装扮:");
  145.             Suit xz = new Suit();
  146.             Tie ld = new Tie();
  147.             LeatherShoes px = new LeatherShoes();
  148.             xz.Decorate(xc);
  149.             ld.Decorate(xz);
  150.             px.Decorate(ld);
  151.             px.Show();
  152.             //装扮花花
  153.             AbsCustomer huahua = new Cat("小猫花花");
  154.             ts.Decorate(huahua);
  155.             bt.Decorate(ts);
  156.             Console.WriteLine("/n小猫花花的装扮:");
  157.             bt.Show();
  158.             Console.WriteLine();
  159.         }
  160.     }
  161. }