策略模式应用之商场收费系统(C#源代码)

来源:互联网 发布:lols8 知乎 编辑:程序博客网 时间:2024/04/29 15:16
 转自:http://blog.csdn.net/andylin02/archive/2008/11/14/3302034.aspx
  1. using System;
  2. namespace CashSystem
  3. {
  4.     //线程类
  5.     class CRunMain
  6.     {
  7.         public static void ShowMessage()
  8.         {
  9.             Console.WriteLine("-----------------please input your choise: ------------");
  10.             Console.WriteLine("/t/t0. quite");
  11.             Console.WriteLine("/t/t1. pay cash noremally");
  12.             Console.WriteLine("/t/t2. pya cash in 8 rebate");
  13.             Console.WriteLine("/t/t3. pay cash in after 300 return 100");
  14.             Console.WriteLine("-------------------------------------------------------");
  15.         }
  16.         public static int Main()
  17.         {
  18.             CCashContext objCont = new CCashContext();
  19.             CCashSuper objCash = null;
  20.             while (true)
  21.             {
  22.                 int nChoice = 0;
  23.                 int nCount = 0;
  24.                 double duMoney = 0.0;
  25.                 double duPrice = 0.0;
  26.                 ShowMessage();
  27.                 nChoice = Convert.ToInt32(Console.ReadLine());
  28.                 switch (nChoice)
  29.                 {
  30.                     case 0:
  31.                         Console.WriteLine("press any key to quit!");
  32.                         Console.Read();
  33.                         return 0;
  34.                     case 1:
  35.                         objCash = new CCashNormal();
  36.                         break;
  37.                         
  38.                     case 2:
  39.                         objCash = new CCashRebate(0.8);
  40.                         break;
  41.                     case 3:
  42.                         objCash = new CCashReturn(300, 100);
  43.                         break;
  44.                     default:
  45.                         objCash = null;
  46.                         break;
  47.                 }
  48.                 if (null == objCash)
  49.                 {
  50.                     Console.WriteLine("input error!");
  51.                     continue;
  52.                 }
  53.                 //set cash object
  54.                 objCont.SetBehavior(objCash);
  55.                 Console.WriteLine("please input price: ");
  56.                 duPrice = Convert.ToDouble(Console.ReadLine());
  57.                 Console.WriteLine("please input count: ");
  58.                 nCount = Convert.ToInt32(Console.ReadLine());
  59.                 duMoney = duPrice * nCount;
  60.                 Console.WriteLine("the properly money you should pay is " + objCont.GetResult(duMoney));
  61.             }
  62.         }
  63.     };
  64.     //收费策略Context
  65.     class CCashContext
  66.     {
  67.         //设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
  68.         public void SetBehavior(CCashSuper objCash)
  69.         {
  70.             this.m_objCash = objCash;
  71.         }
  72.         public double GetResult(double duMoney)
  73.         {
  74.             if (null == this.m_objCash)
  75.             {
  76.                 Console.WriteLine("null == m_objCash");
  77.                 return 0;
  78.             }
  79.             return this.m_objCash.AcceptCash(duMoney);
  80.         }
  81.         private CCashSuper m_objCash;
  82.     };
  83.     abstract class CCashSuper
  84.     {
  85.         public abstract double AcceptCash(double duMoney);
  86.     };
  87.     class CCashReturn:CCashSuper
  88.     {
  89.         public CCashReturn(double duCondition, double duReturn)
  90.         {
  91.             this.m_duCondition = duCondition;
  92.             this.m_duReturn = duReturn;
  93.         }
  94.         public override double AcceptCash(double duMoney)
  95.         {
  96.             if (duMoney > this.m_duCondition)
  97.             {
  98.                 duMoney -= this.m_duReturn;
  99.             }
  100.             return duMoney;
  101.         }
  102.         private double m_duCondition = 0.0;
  103.         private double m_duReturn = 0.0;
  104.     };
  105.     class CCashNormal:CCashSuper
  106.     {
  107.         public override double AcceptCash(double duMoney)
  108.         {
  109.             return duMoney;
  110.         }
  111.     };
  112.     class CCashRebate:CCashSuper
  113.     {
  114.         public CCashRebate(double duRebate)
  115.         {
  116.             this.m_duRebate = duRebate;
  117.         }
  118.         public override double AcceptCash(double duMoney)
  119.         {
  120.             return duMoney * this.m_duRebate;
  121.         }
  122.         private double m_duRebate;
  123.     };
  124. }
原创粉丝点击