//抽象算法类
abstract class Strategy
{
public abstract void AlgorithmInterface();
}
//具体算法A
class ConcreteStrategyA : Strategy
{
//算法A实现方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法A实现");
}
}
//具体算法B
class ConcreteStrategyB : Strategy
{
//算法C实现方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法B实现");
}
}
//具体算法C
class ConcreteStrategyC : Strategy
{
//算法C实现方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法C实现");
}
}
//上下文 用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用
class Context
{
Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
//上下文接口
public void ContextInterface() {
strategy.AlgorithmInterface();
}
}
public static void Main(string[] args)
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
例:超市打折促销
abstract class CashSuper
{
public abstract double acceptCash(double money);
}
//正常收费
public class CashNormal : CashSuper
{
public override double acceptCash(double money) {
return money;
}
}
//打折收费子类
public class CashRebate : CashSuper
{
private double moneyRebate = 1d;
public CashRebate(string moneyRebate)
{
this.moneyRebate = double.Parse(moneyRebate);
}
public override double acceptCash(double money)
{
return money * moneyRebate;
}
}
//满减收费子类
public class CashReturn : CashSuper
{
private double moneyConditon = 0.0d;
private double moneyReturn = 0.0d;
public CashReturn(string moneyCondition, string moneyReturn) {
this.moneyConditon = double.Parse(moneyCondition);
this.moneyReturn = double.Parse(moneyReturn);
}
public override double acceptCash(double money)
{
double result = money;
if (money >= moneyConditon)
result = money - Math.Floor(money / moneyConditon) * moneyReturn;
return result;
}
}
class CashContext
{
private CashSuper cs;
public CashContext(CashSuper csuper) {
this.cs = csuper;
}
public double GetResult(double money) {
return cs.acceptCash(money);
}
}
客户端调用:
public static void Main(string[] args)
{
CashContext cc = null;
switch("收费标准"):
{
case "正常收费":
cc= new CashContext(new CashNormal());
break;
case "满300减100":
cc= new CashContext(new CashReturn("300", "100"));
break;
case "打八折":
cc= new CashContext(new CashRebate("0.8"));
break;
}
}