收银程序一:简单工厂模式实现
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// 简单工厂模式实现方式
/// </summary>
public partial class Module_Study_DesignPatter : System.Web.UI.Page
{
/// <summary>
/// 现金收取类
/// </summary>
abstract class CashSuper
{
public abstract double AcceptCash(double money);
}
/// <summary>
/// 正常收费
/// </summary>
public class NormalCash : CashSuper
{
public override double AcceptCash(double money)
{
throw money;
}
}
/// <summary>
/// 打折收费
/// </summary>
public class RebateCash : CashSuper
{
double _moneyRebate = 1d;
public double MoneyRebate
{
set { _moneyRebate = value; }
get { return _moneyRebate; }
}
public RebateCash(double moneyRebate)
{
MoneyRebate = moneyRebate;
}
public override double AcceptCash(double money)
{
return MoneyRebate * money;
}
}
/// <summary>
/// 返利收费
/// </summary>
public class ReturnCash:CashSuper
{
double _moneyCondition = 0.0d;
double _moneyReturn = 0.0d;
public ReturnCash(double moneyCondition,double moneyReturn)
{
_moneyCondition = moneyCondition;
_moneyReturn = moneyReturn;
}
public override double AcceptCash(double money)
{
double result;
if (money > _moneyCondition)
{
result=money -Math.Floor((money /_moneyCondition))*_moneyReturn;
}
}
}
/// <summary>
/// 收费工厂
/// </summary>
class CashFactory
{
public static CashSuper CreateCash(string cashType)
{
CashSuper cs = null;
switch (cashType)
{
case "正常收费":
cs = new NormalCash();
break;
case "满300送00":
cs=new ReturnCash(300.0d,100.d);
break;
case "":
cs = new RebateCash(0.8d);
break;
}
return cs;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
收银程序二:策略模式
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// 策略模式实现方式
/// </summary>
public partial class Module_Study_StrategyPatter : System.Web.UI.Page
{
/// <summary>
/// 收费策略
/// </summary>
class CashContext
{
/// <summary>
/// 定义现金收取类
/// </summary>
CashSuper cs;
/// <summary>
/// 设置策略行为,参数为具体的现金收费类
/// </summary>
/// <param name="csuper"></param>
public void SetBehavior(CashSuper csuper)
{
this.cs = csuper;
}
/// <summary>
/// 得到现金促销计算结果
/// </summary>
/// <param name="money"></param>
/// <returns></returns>
public double GetResult(double money)
{
return cs.AcceptCash(money);
}
}
/// <summary>
/// 现金收取类
/// </summary>
abstract class CashSuper
{
public abstract double AcceptCash(double money);
}
/// <summary>
/// 正常收费
/// </summary>
public class NormalCash : CashSuper
{
public override double AcceptCash(double money)
{
throw money;
}
}
/// <summary>
/// 打折收费
/// </summary>
public class RebateCash : CashSuper
{
double _moneyRebate = 1d;
public double MoneyRebate
{
set { _moneyRebate = value; }
get { return _moneyRebate; }
}
public RebateCash(double moneyRebate)
{
MoneyRebate = moneyRebate;
}
public override double AcceptCash(double money)
{
return MoneyRebate * money;
}
}
/// <summary>
/// 返利收费
/// </summary>
public class ReturnCash:CashSuper
{
double _moneyCondition = 0.0d;
double _moneyReturn = 0.0d;
public ReturnCash(double moneyCondition,double moneyReturn)
{
_moneyCondition = moneyCondition;
_moneyReturn = moneyReturn;
}
public override double AcceptCash(double money)
{
double result;
if (money > _moneyCondition)
{
result=money -Math.Floor((money /_moneyCondition))*_moneyReturn;
}
}
}
/// <summary>
/// 收费工厂
/// </summary>
class CashFactory
{
public static CashSuper CreateCash(string cashType)
{
CashSuper cs = null;
switch (cashType)
{
case "正常收费":
cs = new NormalCash();
break;
case "满300送00":
cs=new ReturnCash(300.0d,100.d);
break;
case "":
cs = new RebateCash(0.8d);
break;
}
return cs;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
评:这样更改,又把变化点交回客户端,这样客户端就必须要知道所以的策略,所以至还要需要进一步完善..