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

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

策略模式实现用户充值

一、概念

①什么是策略模式?

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;
        }
目录
相关文章
|
8月前
|
存储 供应链 安全
dapp质押swap交易分红系统开发|详情模式|方案设计
区块链的核心是智能合约。这些自动执行的合同包含预定义的规则和条件
|
8月前
|
安全 区块链
BRC20铭文代币质押系统开发详情方案
随着区块链技术的迅猛发展,智能合约逐渐成为人们关注的焦点
|
8月前
|
安全 区块链
NFT卡牌质押代币分红系统开发|步骤逻辑|方案设计
智能保证执行安全,并减少交易成本。智能合约允许在没有第三方的情况下进行可信交易
|
8月前
|
人工智能 算法 安全
dapp质押合约代币分红模式系统开发|细节详情|方案设计
Web 3.0的发展仍面临一些挑战,例如,当前DApps的使用率仍然相对较低
机房合作-职责链模式实现用户登陆
机房合作-职责链模式实现用户登陆
63 1
机房合作-职责链模式实现用户登陆
|
区块链 Python
支付设计白皮书:支付系统的概念与中国互联网支付清算体系(上)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
327 1
支付设计白皮书:支付系统的概念与中国互联网支付清算体系(下)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
636 1
|
安全 区块链
程序人生 - 数字化人民币的无网络支付是如何实现的?
程序人生 - 数字化人民币的无网络支付是如何实现的?
184 0
【重要】支付宝用户增长拉新促活协作费线上激励方案升级公告
尊敬的合作伙伴,您好! 非常感谢大家对支付宝用户增长拉新促活业务的关注和支持,为了更好的服务于合作伙伴,激励合作伙伴开展业务,支付宝决定将原《支付宝用户增长拉新促活协作费线上激励方案公告 (2018年02版)》的协作费政策做进一步优化升级。
984 12
【重要】支付宝用户增长拉新促活协作费线上、线下激励方案延长公告
尊敬的合作伙伴,您好! 非常感谢大家对支付宝用户增长拉新促活业务的关注和支持,为了更好的服务于合作伙伴,支付宝决定将原《支付宝用户增长拉新促活协作费线上激励方案公告 (2018年01版)》 和《支付宝用户增长拉新促活协作费线下激励方案公告 (2018年01版)》的服务商业务协作费政策适用期均延长至2018年9月30日,其他政策内容不变。
940 12