public partial class 策略模式 : Form
{
public 策略模式()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
main11.sss();
}
}
#region 简单工厂模式
abstract class CashSuper//
{
public abstract double acceptCash(double money);
}
class CashNormal : CashSuper//
{
public override double acceptCash(double money)
{
return money;
}
}
class CashRebate : CashSuper
{
private double moneyRebabe = 1d;
public CashRebate(string moneyRebabe)
{
this.moneyRebabe = double.Parse(moneyRebabe);
}
public override double acceptCash(double money)
{
return moneyRebabe * money;
}
}
class CashReturn : CashSuper//
{
private double moneyCondition = 0.0d;
private double moneyReturn = 0.0d;
public CashReturn(string moneyCondition, string moneyReturn)
{
this.moneyCondition = double.Parse(moneyCondition);
this.moneyReturn = double.Parse(moneyReturn);
}
public override double acceptCash(double money)
{
double result = money;
if (money >= moneyCondition)
result = money - Math.Floor(money / moneyCondition) * moneyReturn;
return result;
}
class Factory
{
public static CashSuper createCashSuper(string type)
{
CashSuper cs = null;
switch (type)
{
case "正常收费":
cs = new CashNormal();
break;
case "满300返100":
cs = new CashReturn("300", "100");
break;
case "打8折":
cs = new CashRebate("0,8");
break;
}
return cs;
}
}
}
#endregion
#region 策略模式
abstract class Strategy
{
//算法方法
public abstract void AlgorithmInterface();
}
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
MessageBox.Show("AAAAA");
}
}
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
MessageBox.Show("BBBBB");
}
}
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
MessageBox.Show("CCCCCC");
}
}
class Context
{
Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
class main11
{
public static void sss()
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
}
}
#endregion