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

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

策略模式实现用户充值

一、概念

①什么是策略模式?

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月前
|
缓存 前端开发 安全
消费增值模式与推三返一 + 排队免单模式:解决引流复购难题!
本项目涵盖前端UI、后端逻辑、数据库设计及支付接口集成。通过Python和Django框架搭建了一个支持消费增值、推三返一与排队免单功能的基础后端架构。从环境准备到项目创建、数据库模型设计、视图逻辑处理、表单与模板构建,再到URL配置和项目运行,提供了详细的步骤指导。特别注意安全性、业务逻辑完整性和性能优化。
|
8天前
|
前端开发 PHP 数据库
小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统
全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统
25 0
小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统
|
2月前
|
前端开发 数据库 开发者
链动 3+1 模式与排队免单 5.0 模式:解决平台引流裂变持续性难题
本文介绍了链动3+1模式与排队免单5.0模式的实现细节,涵盖前端展示、后端逻辑、数据库设计、用户验证及奖励机制等方面。通过伪代码展示了用户注册登录、滑落机制、奖励计算、订单处理、排队排序、加速排队等核心功能的实现方式,旨在为开发者提供参考。
|
5月前
|
数据格式
阿里商旅账单系统架构设计实践问题之系统设计中的清结算系统问题如何解决
阿里商旅账单系统架构设计实践问题之系统设计中的清结算系统问题如何解决
机房合作-职责链模式实现用户登陆
机房合作-职责链模式实现用户登陆
59 1
机房合作-职责链模式实现用户登陆
|
Java 程序员 开发者
erp系统定制开发费用高不高吗?
ERP系统定制开发是根据企业的特定需求和业务流程,量身定制一套符合企业实际情况的ERP系统。虽然定制开发的费用相对较高,但可以更好地满足企业的管理需求,让ERP系统更好用。
219 0
erp系统定制开发费用高不高吗?
|
算法 安全 搜索推荐
商城卷轴消费增值裂变模式系统开发部署设计建议指南
商城卷轴消费增值裂变模式系统开发部署设计建议指南
|
微服务
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
列表的结果需要关联查询,数据字典的数据也需要展示对应的文本内容而不是值,除了定义VO的方式,我们也可以使用扩展实体类的方式
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
|
安全 开发者
新能力|分账明白,账本清楚,商家超轻松
目前,商家分账 功能已经全面开放给企业商户,快来了解一下吧。
2520 12
新能力|分账明白,账本清楚,商家超轻松
|
小程序 Serverless API
云上开发花呗支付小程序
本文将介绍如何使用小程序Serverless云调用开发一个具有花呗支付能力的小程序。
云上开发花呗支付小程序