软件设计模式实验3.doc
文本预览下载声明
实验三 策略模式
请用C++、Java、C#或VB.NET任意一种面向对象语言实现
一个商场收银软件,要求营业员根据客户购买商品单价和数量,
向客户收费。
参考伪代码:
商场收银系统v1.0关键伪代码如下:
//声明一个double变量total来计算总计
double?total?=?0.0d;
private?void?btnOk_Click(object?sender,?
EventArgs?e) {
double?totalPrices=Convert.ToDouble(txtPrice.Text)?*?Convert.ToDouble(txtNum.Text);
total?=?total?+?totalPrices;
? lbxList.Items.Add(“单价:”+txtPrice.Text+“?数量: +txtNum.Text+?合计:+totalPrices.ToString());
? lblResult.Text?=?total.ToString();
}
2、增加需求,可实现各种折扣的需求,如打5、6、7、8折扣等,系统如何变化?。
参考伪代码:
double?total?=?0.0d; //总计
private?void?form1_Load(object?sender,?EventArgs?e) {
cbxType.Items.Addrange(new object[] {“正常收费”, “8折”, “7折”});
cbxType.SelectedIndex=0; //初始化折扣下拉框
}
private?void?btnOk_Click(object?sender,?EventArgs?e) {
double?totalPrices=0d;
switch(cbxType.SelectedIndex){ //根据选项决定打折额度
case 0: totalPrices=Convert.ToDouble(txtPrice.Text)?*
? Convert.ToDouble(txtNum.Text); break;
case 1: totalPrices=Convert.ToDouble(txtPrice.Text)?*
? Convert.ToDouble(txtNum.Text)*0.8; break;
case 2: totalPrices=Convert.ToDouble(txtPrice.Text)?*
? Convert.ToDouble(txtNum.Text)*0.7; break;
}
total?爐otal?爐otalPrices;
ert.? lbxList.Items.Add(“单价:”+txtPrice.Text+“?数量: +txtNum.Text+?合计:+totalPrices.ToString());
? lblResult.Text?=?total.ToString();
}
3、现在需求又增加了:商场的活动加大,需要有满300返100的促销算法,应该怎么办?所以必须学会抽象。面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。简单工厂模式的实现如下。
参考伪代码:
现金收费抽象类(CashSuper)
abstract class CashSuper{
public abstract double acceptCash(double money);
}
正常收费子类(CashNormal)
class CashNormal :CashSuper{
public override double acceptCash(double money){
return money;
显示全部