• PHP策略模式1


    【IUser.php】

    <?php
    /**
     * 策略模式
     * 将一组特定的行为和算法封装成类,用来适应某些特定的上下文环境,实现从硬编码到解耦
     * 应用举例:电商系统针对不同性别跳转到不同的商品类目,并展示不同的广告信息和商品信息
     */
    
    /**
     * 定义用户的接口
     */
    interface IUser
    {
        //展示广告信息
        public function showAds();
    
        //展示商品信息
        public function showGoods();
    }

    【FemaleUser.class.php】

    <?php
    
    /**
     * 策略模式 -- 女性用户的策略
     */
    require_once 'IUser.php';
    
    class FemaleUser implements IUser
    {
        public function showAds()
        {
            return '女性用户的广告信息';
        }
    
        public function showGoods()
        {
            return '面膜';
        }
    }

    【MaleUser.class.php】

    <?php
    
    /**
     * 策略模式 -- 男用户的策略
     */
    require_once 'IUser.php';
    
    class MaleUser implements IUser
    {
        public function showAds()
        {
            return '男性用户的广告信息';
        }
    
        public function showGoods()
        {
            return 'iphone6s';
        }
    }

    【Strategy.class.php】

    <?php
    /**
     * 策略模式的具体实现方法
     */
    
    require_once 'interface/IUser.php';
    require_once 'interface/FemaleUser.class.php';
    require_once 'interface/MaleUser.class.php';
    
    class Strategy
    {
        protected $strategy;
    
        function show(){
            $res = '广告:'.$this->strategy->showAds().'<br>';
            $res .= '商品:'.$this->strategy->showGoods().'<br>';
            return $res;
        }
    
        function setStrategy(IUser $stra)
        {
            $this->strategy = $stra;
        }
    }

    【调用】

    ////【策略模式】
    $celue = new Strategy();
    $gender = 'female'; //假设现在是女性
    if ($gender == 'female') {
        $straObj = new FemaleUser();
    } else {
        $straObj = new MaleUser();
    }
    $celue->setStrategy($straObj);
    echo $celue->show();
  • 相关阅读:
    智联招聘
    我的Linux以及软件配置(长期更新)
    关于Git的笔记
    PHP和HTML表单
    web学习笔记——CSS整理(一)
    新开通博客园
    Thinphp模板替换
    __APP__
    大步前行
    centos 7 添加环境变量
  • 原文地址:https://www.cnblogs.com/rxbook/p/10452549.html
Copyright © 2020-2023  润新知