VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之策略模式

策略模式

一.所有算法都是完成相同的工作,只是具体实现不同,以相同的方式调用所有的算法,减少耦合,方便单元测试.

二.当客户端需要在不同时间应用不同的规则时,就可以用策略模式.

三.与简单工厂的不同:简单工厂模式中,客户端用到了工厂和算法两个类,算法类一但变更,就会影响客户端.但策略模式中,因为客户端只用到了策略类,与算法类无关.

模式的实现代码:

 

public abstract class CashSpuer
{
public abstract double acceptCash(double money);
}

public class CashNormal : CashSpuer
{
public override double acceptCash(double money)
{
return money;
}
}

public class CashRebate : CashSpuer
{
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 : CashSpuer
{
private double moneyCondition;
private double moneyReturn;
public CashReturn(string moneyCondition, string moneyReturn)
{
this.moneyCondition = double.Parse(moneyCondition);
this.moneyReturn = double.Parse(moneyReturn);
}
public override double acceptCash(double money)
{
if (money > moneyCondition)
{
return money - Math.Floor(money / moneyCondition) * moneyReturn;
}
else
return money;
}
}

public class CashContext
{
private CashSpuer cs;
public CashContext(string type)
{
switch(type)
{
case "正常收费 ":
cs=new CashNormal();
break;
case "八折优惠 ":
cs=new CashRebate("0.8");
break;
case "三百减一百":
cs = new CashReturn("300", "100");
break;
}
}

public double acceptCash(double money)
{
return cs.acceptCash(money);
}
}

 

模式调用:

double total = 0d;
private void btnOK_Click(object sender, EventArgs e)
{
CashContext cc = null;
double totalPrice=0d;
cc = new CashContext(cbxType.SelectedItem.ToString());
totalPrice = cc.acceptCash(double.Parse(txtPrice.Text) * double.Parse(txtNums.Text));
total=total+totalPrice;
txtTotal.Text = total.ToString();
listBox1.Items.Add(string.Format("单价:{0} 数量:{1} 计算方式:{2} 小计:{3}", txtPrice.Text.PadRight(3), txtNums.Text.PadRight(3), cbxType.SelectedItem.ToString().PadRight(12), totalPrice.ToString()));
}

private void Form1_Load(object sender, EventArgs e)
{
cbxType.Items.AddRange(new object[] { "正常收费 ", "八折优惠 ", "三百减一百" });
cbxType.SelectedIndex = 0;
}

 
 
标签: 设计模式


相关教程