C#大话设计模式代码

来源:互联网 发布:js中date对象的方法 编辑:程序博客网 时间:2024/05/01 07:59

   收银程序一:简单工厂模式实现

 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)
    {

    }
}

评:这样更改,又把变化点交回客户端,这样客户端就必须要知道所以的策略,所以至还要需要进一步完善..

 

原创粉丝点击