【c#】机房重构之策略模式

What?

它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法变化,不影响使用算法的客户。

How?

这里写图片描述

Where?

此设计模式我用在了计算金额的地方,由于机房重构中有两种卡(会员卡和非会员卡),因此使用策略模式进行计算,下面是在下机中的使用。小编使用的是策略模式+简单工厂

代码展示

1、策略模式:

        /// <summary>
        /// 承接上下
        /// </summary>
        /// <param name="type"></param>
        public class Cashcontext
        {
            CashSuper cs = null;

            public Cashcontext(Entity.CardInfo CardInfo)
            {

                switch (CardInfo.CardType)
                {
                    case "会员卡":
                        Rate rate = new Rate();
                        cs = rate;
                        break;
                    case "非会员卡":
                        TmpRate tmprate = new TmpRate();
                        cs = tmprate;
                        break;
                }

            }
            public Entity.LineInfo GetResult(Entity.LineInfo LineInfo, Entity.BasicDataInfo BasicDataInfo)
            {
                return cs.acceptCash(LineInfo, BasicDataInfo);
            }
        }
        /// <summary>
        /// 抽象类
        /// </summary>
        public abstract class CashSuper
        {
            //算法方法
            public abstract Entity.LineInfo acceptCash(Entity.LineInfo LineInfo, Entity.BasicDataInfo BasicDataInfo);
        }
        /// <summary>
        /// 会员
        /// </summary>
        public class Rate : CashSuper
        {
            public override Entity.LineInfo acceptCash(Entity.LineInfo LineInfo, Entity.BasicDataInfo BasicDataInfo)
            {
                
                //计算花费金额
                if (Convert.ToInt32(BasicDataInfo.UnitTime) != 0)
                {
                    if (LineInfo.ConsumeTime % Convert.ToInt32(BasicDataInfo.UnitTime) == 0)
                    {
                        LineInfo.ConsumCash = (LineInfo.ConsumeTime / Convert.ToInt32(BasicDataInfo.UnitTime)) * BasicDataInfo.Rate;
                    }
                    else
                    {
                        LineInfo.ConsumCash = (LineInfo.ConsumeTime / Convert.ToInt32(BasicDataInfo.UnitTime) + 1) * BasicDataInfo.Rate;
                    }
                }
                
                return LineInfo;
            }


        }
        /// <summary>
        /// 非会员
        /// </summary>
        public class TmpRate : CashSuper
        {
            public override Entity.LineInfo acceptCash(Entity.LineInfo LineInfo, Entity.BasicDataInfo BasicDataInfo)
            {
                //计算花费金额
                if (LineInfo.ConsumeTime % Convert.ToInt32(BasicDataInfo.UnitTime) == 0)
                {
                    LineInfo.ConsumCash = (LineInfo.ConsumeTime / Convert.ToInt32(BasicDataInfo.UnitTime)) * BasicDataInfo.TmpRate;
                }
                else
                {
                    LineInfo.ConsumCash = (LineInfo.ConsumeTime / Convert.ToInt32(BasicDataInfo.UnitTime) + 1) * BasicDataInfo.TmpRate;
                }
                return LineInfo;
            }

        }

2、B层调用

public Entity.LineInfo SelectCash(Entity.LineInfo LineInfo, Entity.CardInfo CardInfo, Entity.BasicDataInfo BasicDataInfo)
        {
            Strategy Strategy = new Strategy();
            Strategy.Cashcontext cashContext = new Strategy.Cashcontext(CardInfo);
            Entity.LineInfo lineInfo = cashContext.GetResult(LineInfo, BasicDataInfo);
            return lineInfo;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值