机房合作-策略模式实现用户充值

简介: 机房合作-策略模式实现用户充值

策略模式实现用户充值

一、概念

①什么是策略模式?

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

②如何使用策略模式?

将每个算法都封装起来、定义一个策略类并且在策略类中定义一个所有算法的公共接口、定义一个context类用来维护对strategy对象的引用。

③为什么要使用策略模式?

策略模式可以解决多重条件语句的问题,易于维护。

类图



实战、策略模式实现用户充值

类图



代码实现

Context类

public class Context
    {
        RechargeStrategy strategy;
        //通过构造方法传入具体的收费策略
        public Context (RechargeStrategy strategy)
        {
            this.strategy = strategy;
        }
        //根据收费策略返回不同的结果
        public decimal ContextInterface(decimal money )
        {
           return  strategy.Recharge(money);
        }
    }

RechargeStrategy类

 abstract   public class RechargeStrategy
    {
        //充值金额抽象类
        public abstract decimal Recharge(decimal money);
    }

StrategyReturn类

/// <summary>
      /// 满赠类
      /// </summary>
    public class StrategyReturn:RechargeStrategy
    {
        private decimal moneyCondition;
        private decimal moneyReturn;
        /// <summary>
        /// 初始化时输入的赠送条件和赠送值
        /// </summary>
        /// <param name="moneyCondition">赠送条件</param>
        /// <param name="moneyReturn">赠送值</param>
        public StrategyReturn(decimal moneyCondition,decimal moneyReturn)
        {
            this.moneyCondition = moneyCondition;
            this.moneyReturn = moneyReturn;
        }
        /// <summary>
        /// 计算返利数值
        /// </summary>
        /// <param name="money">充值金额</param>
        /// <returns></returns>
        public override decimal Recharge(decimal money)
        {
            decimal result = money;
            //若大于赠送条件则加上赠送金额
            if (money>=moneyCondition)
                result = money +Math.Floor(money / moneyCondition) * moneyReturn;
                return result;
        }
    }

业务逻辑实现层

public class RechargeBLL
    {
        //实例化WCF代理服务对象
        DateBaseServiecClient client = new DateBaseServiecClient();
        /// <summary>
        /// 充值
        /// </summary>
        /// <param name="recharge">基本信息实体</param>
        /// <param name="value">满赠条件</param>
        /// <returns></returns>
        public CustomerModel Recharge(string id, decimal charge,string giveInfo)
        {
            //声明一个RechargeModel对象
            RechargeModel rechargeModel = new RechargeModel();
            CustomerModel customer = client.SelectCustomerExist(id);
            PriceModel priceInfo = client.SelectPrice();
                //策略模式声明一个Context对象
                Strategy.Context context = null;
                //根据用户选择的满赠条件,进行相应的策略
                switch (giveInfo )
                {
                    case "50送20":
                        //通过构造方法传入具体的收费策略
                        context = new Strategy.Context(new Strategy.StrategyReturn(50, 20));
                        break;
                    case "100送50":
                        context = new Strategy.Context(new Strategy.StrategyReturn(100, 50));
                        break;
                }
                //根据不同的收费策略计算不同的结果
                decimal money = context.ContextInterface(charge );
                //通过总金额-充值金额的出赠送金额
                decimal giveMoney = money - charge;
                //金额汇总
                decimal allMoney = customer.balance + money;
                //修改用户表余额
                client.UpdateBalance(id , allMoney);
                //赋值赠送金额
                rechargeModel.giveMoney = giveMoney;
            }
            else
            {
                if (charge.ToString() == "")
                {
                    throw new Exception("请输入充值金额");
                }
                // 赠送金额为零
                rechargeModel.giveMoney = 0;
                //总金额
                decimal allMoney = charge + customer.balance;
                //修改用户表余额
                client.UpdateBalance(id , allMoney);
            }
            //赋值当前操作员卡号
            rechargeModel.managerID = StaticManager.managerID;
            //rechargeModel.managerID = recharge.managerID;
            //赋值充值金额
            rechargeModel.charge = charge;
            //赋值当前充值卡号
            rechargeModel.userID = id ;
            //赋值未结账状态
            rechargeModel.checkStatus = false;
            //赋值当前充值日期和时间
            rechargeModel.time = DateTime.Now;
            //向充值表中插入一条充值记录
            client.InsertRecharge(rechargeModel);
            CustomerModel customerInfo = new CustomerModel();
            //返回用户表信息
           customerInfo = client.SelectCustomerExist(id );
            return customerInfo;
        }
目录
相关文章
|
2月前
|
数据库 网络架构 UED
支付设计白皮书:支付系统的路由系统设计
支付设计白皮书:支付系统的路由系统设计
122 1
|
9月前
|
安全 API 双11
【支付宝推荐】批量转账为商家大促期间转账多人保驾护航
为了提升商家在大促期间的转账效率,支付宝推出了一款免费高效的转账多人工具,免费使用!
|
12月前
机房合作-职责链模式实现用户登陆
机房合作-职责链模式实现用户登陆
41 1
机房合作-职责链模式实现用户登陆
|
存储 消息中间件 安全
老板:公司系统太多,能不能实现账号互通?(一)
最近开发新产品,然后老板说我们现在系统太多了,每次切换系统登录太麻烦了,能不能做个优化,同一账号互通掉。作为一个资深架构狮,老板的要求肯定要满足,安排!
老板:公司系统太多,能不能实现账号互通?(一)
|
安全 NoSQL Redis
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)
|
小程序
新能力 | 优惠券核销率提升40%!“支付后推荐”能力正式开放
现在,“支付后推荐”能力全面开放!
1708 11
新能力 | 优惠券核销率提升40%!“支付后推荐”能力正式开放
|
安全 开发者
新能力|分账明白,账本清楚,商家超轻松
目前,商家分账 功能已经全面开放给企业商户,快来了解一下吧。
2359 0
新能力|分账明白,账本清楚,商家超轻松
权大师:让企业注册成本降低了40%
让企业注册成本降低了40%
2461 0
【重要】支付宝用户增长拉新促活协作费线上、线下激励方案延长公告
尊敬的合作伙伴,您好! 非常感谢大家对支付宝用户增长拉新促活业务的关注和支持,为了更好的服务于合作伙伴,支付宝决定将原《支付宝用户增长拉新促活协作费线上激励方案公告 (2018年01版)》 和《支付宝用户增长拉新促活协作费线下激励方案公告 (2018年01版)》的服务商业务协作费政策适用期均延长至2018年9月30日,其他政策内容不变。
872 0
【重要】支付宝用户增长拉新促活协作费线上激励方案升级公告
尊敬的合作伙伴,您好! 非常感谢大家对支付宝用户增长拉新促活业务的关注和支持,为了更好的服务于合作伙伴,激励合作伙伴开展业务,支付宝决定将原《支付宝用户增长拉新促活协作费线上激励方案公告 (2018年02版)》的协作费政策做进一步优化升级。
922 0

热门文章

最新文章