zoukankan      html  css  js  c++  java
  • PHP的设计模式总结策略模式

    策略模式的简单解释就是一个主体为了解决某个问题列出几种策略,根据策略产生具体的行为方法。

    想实现这样一个功能:开展一个网站邀请活动,然后参与者将推广的网站地址链接发给好友,好友点击链接后在网站注册成功,的邀请日志记录条数加1

    采用策略模式我们可以

    1:如果产品人员现在决定不要计数这个功能,那我们只需修改 策略模块。
    2:如果决定邀请到一个人数字加2 ,我们则只需修改相应的行为类。
    3:在如果这个产品人员实在变态,把邀请的整个逻辑都改了,那我们只需要 增加相应的策略类,然后增加行为(如果存在就不必增加)主体始终是不需要修改的。 

    /**
     * 活动主体类
    */
    class Activity  {
        private $strategy; //用于保存策略实例
        public  $strategyName = 'DEFAULTActivityStrategy';
        public function __construct($strategyName) {
            if(!empty($strategyName)){
                $this->strategyName = $strategyName;
            }
            $this->strategy = AbstractActivityStrategy::getInstance($this->strategyName); //加载策略类
        }
        public function addLog() {
            $data = array('id'=>'uid','event'=>'eventName');  // 添加到数据库的数据
            $this->strategy->addLog($data);
        }
    }
    /**
     * 策略工厂策略类
     */
    abstract class AbstractActivityStrategy
    {
        abstract public function addLog($data);
        public static function getInstance($strategyName)
        {
            return new $strategyName;
        }
    }
    
    /**
     * 策略具体类
     */
    class DEFAULTActivityStrategy extends AbstractActivityStrategy {
        public function addLog($data) {
            $activityLog = new ActivityLog();
            $activityLog->save($data);
            $activityLogAmount = new ActivityLogAmount(); //计数类
            $activityLogAmount->countValue += 1;
            $activityLogAmount->save();
        }
    }
    /**
     * 活动日志具体类
     */
    class ActivityLog  {
    
        public function save($data)
        {
            echo "数据保存到数据库<br/>";
        }
    }
    /**
     * 活动计数具体类
     */
    class ActivityLogAmount {
        public $countValue; //邀请记录数
        public function __construct()
        {
            $this->countValue = 0;
        }
        public function save()
        {
            echo "推荐次数为".$this->countValue;
        }
    }
    
    
    $activity = new Activity(null);
    $activity->addLog();

    测试结果为

    数据保存到数据库
    推荐次数为1

  • 相关阅读:
    ISEX安全期计算 V4.0 多国语言版女性安全期避孕计算实用工具软件
    FireARP防火墙 V3.1防局域网ARP攻击的软件
    asp.net页面字段绑定概述
    C# 删除、遍历指定目录下的所有指定文件、文件夹
    加入收藏、设为首页常用脚本
    分页加载数据Demo
    学习fragment的生命周期
    widget控件
    Menu菜单的代码和xml的创建
    WebView控件
  • 原文地址:https://www.cnblogs.com/phplover/p/2970169.html
Copyright © 2011-2022 走看看