//策略模式
static void Behavior()
...{
CushContext cc = new CushContext();
CushSuper cs = null;
Console.Write("请输入价格 ");
string douPrice = Console.ReadLine();
Console.Write("请输入数量 ");
string douNum = Console.ReadLine();
Console.Write("请选择收费类型;0正常收费,1打折,2买300送100n");
string strType = Console.ReadLine();
switch (strType)
...{
case "0":
cs = new CushSuperNormal();
//cs = (CushSuper)Assembly.Load("Head First Desig").CreateInstance("Head_First_Desig.CushSuperNormal");
break;
case "1":
cs = new CushSuperRebate("0.8");
break;
case "2":
// cs = new CushReturn(300, 100);
break;
}
cc.setBehavior(cs);
double result = cc.GetResult(double.Parse(douPrice) * double.Parse(douNum));
Console.Write("应收费:" + result.ToString());
Console.Read();
}
//
using System;
using System.Collections.Generic;
using System.Text;
namespace Head_First_Desig
...{
public abstract class CushSuper
...{
public abstract double acceptCush(double money);

}
class CushSuperNormal : CushSuper
...{
public override double acceptCush(double money)
...{
return money;
}
}
class CushSuperRebate : CushSuper
...{
private double rebate = 1d;
public CushSuperRebate(string Rebate)
...{
this.rebate = double.Parse(Rebate);
}
public override double acceptCush(double money)
...{
return money * rebate;
}
}
class CushReturn : CushSuper
...{
private double condition = 0.0d;
private double moneyReturn = 0.0d;
public CushReturn(string Condition, string MoneyReturn)
...{
this.condition = double.Parse(Condition);
this.moneyReturn = double.Parse(MoneyReturn);
}
public override double acceptCush(double money)
...{
double result = 0.0d;
if (money > condition)
...{
result = money - Math.Floor(money / condition) * moneyReturn;
}
return result;
}
}
class CushFactory
...{
public static CushSuper createCushAccept(string type)
...{
CushSuper cs = null;
switch (type)
...{
case "0":
cs = new CushSuperNormal();
break;
case "1":
cs = new CushSuperRebate("0.8");
break;
case "2":
//cs = new CushReturn(300, 100);
break;
}
return cs;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Head_First_Desig
{
class CushContext
{
//声明一个现金收费父类对象
private CushSuper cs;
//设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
public void setBehavior(CushSuper cs)
{
this.cs = cs;
}
//得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果)
public double GetResult(double money)
{
return cs.acceptCush(money);
}
}
}

被折叠的 条评论
为什么被折叠?



