zoukankan      html  css  js  c++  java
  • 设计模式之装饰器模式

    装饰器模式是一个结构型设计模式

    模式类图

    实例类图

      1    interface IHumburger
      2     {
      3         double GetPrice();
      4         string Name { get; }
      5     }
      6 
      7     class ChickenHumbuger : IHumburger
      8     {
      9         public double GetPrice()
     10         {
     11             return 10;
     12         }
     13 
     14         public string Name
     15         {
     16             get { return "鸡肉堡"; }
     17         }
     18     }
     19 
     20     class PorkHumbuger : IHumburger
     21     {
     22         public double GetPrice()
     23         {
     24             return 12;
     25         }
     26 
     27         public string Name
     28         {
     29             get { return "手撕猪肉堡"; }
     30         }
     31     }
     32 
     33     abstract class Condiment : IHumburger
     34     {
     35         protected IHumburger Humburger;
     36 
     37         protected Condiment(IHumburger humburger)
     38         {
     39             Humburger = humburger;
     40 
     41         }
     42 
     43         protected abstract double GetCondimentPrice();
     44         protected abstract string GetCondimentName();
     45 
     46         public double GetPrice()
     47         {
     48             return Humburger.GetPrice() + GetCondimentPrice();
     49         }
     50 
     51         public string Name
     52         {
     53             get { return Humburger.Name + "" + GetCondimentName(); }
     54         }
     55     }
     56 
     57     class Chilli : Condiment
     58     {
     59         public Chilli(IHumburger humburger)
     60             : base(humburger)
     61         {
     62         }
     63 
     64         protected override double GetCondimentPrice()
     65         {
     66             return 1;
     67         }
     68 
     69         protected override string GetCondimentName()
     70         {
     71             return "辣椒";
     72         }
     73     }
     74 
     75     class Lettuce : Condiment
     76     {
     77         public Lettuce(IHumburger humburger)
     78             : base(humburger)
     79         {
     80         }
     81 
     82         protected override double GetCondimentPrice()
     83         {
     84             return 1.5;
     85         }
     86 
     87         protected override string GetCondimentName()
     88         {
     89             return "生菜";
     90         }
     91     }
     92 
     93     class Cheese : Condiment
     94     {
     95         public Cheese(IHumburger humburger)
     96             : base(humburger)
     97         {
     98         }
     99 
    100         protected override double GetCondimentPrice()
    101         {
    102             return 2;
    103         }
    104 
    105         protected override string GetCondimentName()
    106         {
    107             return "芝士";
    108         }
    109     }
    View Code
     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5 
     6             PrintMenu();
     7             IHumburger humburger = new ChickenHumbuger();
     8             ConsoleKey key = ConsoleKey.A;
     9             while (key != ConsoleKey.Escape)
    10             {
    11                 key = Console.ReadKey(false).Key;
    12                 switch (key)
    13                 {
    14                     case ConsoleKey.C:
    15                         humburger = new ChickenHumbuger();
    16                         break;
    17                     case ConsoleKey.P:
    18                         humburger = new PorkHumbuger();
    19                         break;
    20                     case ConsoleKey.D1:
    21                     case ConsoleKey.NumPad1:
    22                         humburger = new Lettuce(humburger);
    23                         break;
    24                     case ConsoleKey.D2:
    25                     case ConsoleKey.NumPad2:
    26                         humburger = new Chilli(humburger);
    27                         break;
    28                     case ConsoleKey.D3:
    29                     case ConsoleKey.NumPad3:
    30                         humburger = new Cheese(humburger);
    31                         break;
    32                     default:
    33                         Console.WriteLine("没有此选项");
    34                         break;
    35                 }
    36                 PrintDetail(humburger);
    37             }
    38             Console.ReadLine();
    39         }
    40 
    41         private static void PrintMenu()
    42         {
    43             Console.WriteLine("C.鸡肉堡");
    44             Console.WriteLine("P.手撕猪肉堡");
    45             Console.WriteLine("1.生菜");
    46             Console.WriteLine("2.辣椒");
    47             Console.WriteLine("3.");
    48             Console.WriteLine("Esc.点餐完成");
    49         }
    50 
    51         private static void PrintDetail(IHumburger humburger)
    52         {
    53             Console.WriteLine("汉堡名称:" + humburger.Name + "
    " + "总价:" + humburger.GetPrice());
    54             Console.WriteLine("---------------------------------------------");
    55         }
    56     }
    客户端调用代码
  • 相关阅读:
    cscope使用技巧
    GNU的strong symbol和weak symbol
    vim自定义插件放入pathogen管理
    kernel生成针对x86架构的tags和cscope数据库
    vim+cscope简易教程
    mac重装系统
    Mac升级bash到最新版本
    Mac中提升权限修改系统目录
    macbook中gcc替换为gnu gcc
    固定二进制位的整型变量
  • 原文地址:https://www.cnblogs.com/XzcBlog/p/5197976.html
Copyright © 2011-2022 走看看