当前位置: 首页 > news >正文

使用原型模式来处理用户抽奖的银两明细

实现功能:

用户抽奖消耗相应银两,将银两明细写入数据库,(为示例简单,体现模式意图,我们假定用户抽奖一定会中奖),将抽中的银两增加给用户也写入数据库

 

一.银两类:

class Silver
{
    const RULE_ADD = 1;
    const RULE_REDUCE = 2;

    private $uid;
    private $type;
    private $rule;
    private $quantity;
    private $desc;
    private $time;

    public function __construct($uid,$type, $rule, $quantity, $desc, $time)
    {
        $this->uid      = $uid;
        $this->type     = $type;
        $this->rule     = $rule;
        $this->quantity = $quantity;
        $this->desc     = $desc;
        $this->time     = time();
    }

    /**
     * @param mixed $quantity
     */
    public function setQuantity($quantity)
    {
        $this->quantity = $quantity;
    }

    /**
     * @param mixed $desc
     */
    public function setDesc($desc)
    {
        $this->desc = $desc;
    }

    /**
     * @param mixed $rule
     */
    public function setRule($rule)
    {
        $this->rule = $rule;
    }

    public function writeToDb()
    {
        // 模拟写入数据库
        echo "{$this->uid}|{$this->type}|{$this->rule}|{$this->quantity}|{$this->desc}|{$this->time}已写入数据库<br>";
        return true;
    }
}

  

二.抽奖类

class Lottery
{
    const SILVER_TYPE               = 1;
    const SILVER_ADD_QUANTITY       = 20;
    const SILVER_REDUCE_QUANTITY    = 10;

    private $uid;
    private $silver;

    public function __construct($uid)
    {
        $this->uid = $uid;
    }

    // 抽奖
    public function run()
    {
        // 处理其他逻辑....

        /**
         * 将扣除用户的银两写入记录
         */
        $this->silver   = new Silver(
            $this->uid,
            self::SILVER_TYPE,
            Silver::RULE_REDUCE,
            self::SILVER_REDUCE_QUANTITY,
            '抽奖扣除银两',
            time()
        );

        // 处理其他逻辑....

        /**
         * 使用原型模式,直接clone一个银两类
         * 将用户抽奖获得的银两写入记录
         */
        $addSilver       = clone $this->silver;
        $addSilver->setRule(Silver::RULE_ADD);
        $addSilver->setQuantity(self::SILVER_ADD_QUANTITY);
        $addSilver->setDesc('抽奖中奖');

        if ($this->silver->writeToDb() && $addSilver->writeToDb()) {
            echo '<hr>抽奖成功!';
        }
    }
}

  

三.调用

$lottery = new Lottery(10);
$lottery->run();

  

转载于:https://www.cnblogs.com/itfenqing/p/8728634.html

相关文章:

  • 云计算的三种服务模式:IaaS,PaaS和SaaS
  • 你不可错过的前端面试题(一)
  • 关于同时Python3和Python2引起的问题,Fabric-samples的balance-transfer不能运行
  • React 深入系列2:组件分类
  • 深信服防火墙设备故障机的更换方法
  • [日常] Go语言圣经--作用域,基础数据类型,整型
  • Elasticsearch 父子关系维护和检索案例分享
  • Wamp集成环境 添加PHP的新版本
  • 建立私有CA及Nginx绑定SSL加密
  • Vue:替换/合并现有的特性
  • 杨老师课堂之JavaScript案例之自动切换轮播图片
  • 关于Vue.js面试题汇总
  • Android两次后退键退出
  • 敏捷开发与瀑布式开发的区别
  • [转] Webpack的devtool和source maps
  • gulp 教程
  • java2019面试题北京
  • JavaScript的使用你知道几种?(上)
  • Java-详解HashMap
  • js如何打印object对象
  • Kibana配置logstash,报表一体化
  • mac修复ab及siege安装
  • Phpstorm怎样批量删除空行?
  • Puppeteer:浏览器控制器
  • spark本地环境的搭建到运行第一个spark程序
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue.js框架原理浅析
  • vue2.0项目引入element-ui
  • XML已死 ?
  • 不上全站https的网站你们就等着被恶心死吧
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 后端_ThinkPHP5
  • 技术:超级实用的电脑小技巧
  • 数组的操作
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 怎样选择前端框架
  • 转载:[译] 内容加速黑科技趣谈
  • ​2020 年大前端技术趋势解读
  • ​业务双活的数据切换思路设计(下)
  • $(selector).each()和$.each()的区别
  • (C语言)字符分类函数
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十三)Flask之特殊装饰器详解
  • (未解决)macOS matplotlib 中文是方框
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Scala的“=”符号简介
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ***利用Ms05002溢出找“肉鸡
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net MVC4 上传大文件,并保存表单