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

using System;

namespace CashSystem
{
//线程类
class CRunMain
{
public static void ShowMessage()
{
Console.WriteLine("-----------------please input your choise: ------------");
Console.WriteLine("\t\t0. quite");
Console.WriteLine("\t\t1. pay cash noremally");
Console.WriteLine("\t\t2. pya cash in 8 rebate");
Console.WriteLine("\t\t3. pay cash in after 300 return 100");
Console.WriteLine("-------------------------------------------------------");
}

public static int Main()
{
CCashContext objCont = new CCashContext();
CCashSuper objCash = null;

while (true)
{
int nChoice = 0;
int nCount = 0;
double duMoney = 0.0;
double duPrice = 0.0;

ShowMessage();
nChoice = Convert.ToInt32(Console.ReadLine());

switch (nChoice)
{
case 0:
Console.WriteLine("press any key to quit!");
Console.Read();
return 0;

case 1:
objCash = new CCashNormal();
break;
 
case 2:
objCash = new CCashRebate(0.8);
break;

case 3:
objCash = new CCashReturn(300, 100);
break;

default:
objCash = null;
break;
}

if (null == objCash)
{
Console.WriteLine("input error!");
continue;
}

//set cash object
objCont.SetBehavior(objCash);

Console.WriteLine("please input price: ");
duPrice = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("please input count: ");
nCount = Convert.ToInt32(Console.ReadLine());

duMoney = duPrice * nCount;

Console.WriteLine("the properly money you should pay is " + objCont.GetResult(duMoney));
}
}
};

//收费策略Context
class CCashContext
{
//设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
public void SetBehavior(CCashSuper objCash)
{
this.m_objCash = objCash;
}

public double GetResult(double duMoney)
{
if (null == this.m_objCash)
{
Console.WriteLine("null == m_objCash");
return 0;
}

return this.m_objCash.AcceptCash(duMoney);
}

private CCashSuper m_objCash;
};

abstract class CCashSuper
{
public abstract double AcceptCash(double duMoney);
};

class CCashReturn:CCashSuper
{
public CCashReturn(double duCondition, double duReturn)
{
this.m_duCondition = duCondition;
this.m_duReturn = duReturn;
}

public override double AcceptCash(double duMoney)
{
if (duMoney > this.m_duCondition)
{
duMoney -= this.m_duReturn;
}

return duMoney;
}

private double m_duCondition = 0.0;
private double m_duReturn = 0.0;
};

class CCashNormal:CCashSuper
{
public override double AcceptCash(double duMoney)
{
return duMoney;
}

};

class CCashRebate:CCashSuper
{
public CCashRebate(double duRebate)
{
this.m_duRebate = duRebate;
}

public override double AcceptCash(double duMoney)
{
return duMoney * this.m_duRebate;
}


private double m_duRebate;
};
}

posted @ 2008-11-14 23:13  andylin02  阅读(519)  评论(0)    收藏  举报