zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    东驴西磨
    深入理解计算机系统 第二章信息的表示和处理(笔记小结)
    Amdahl 阿姆达尔定律(系统优化)
    想你的夜——葱油饼
    TypeScript and AWS Lambda practicing road map
    "Silicon Valley-like" companies think of engineers as value generators
    original intentions
    Canopy is hiring Postgres SQL Engineer
    在多线程中 feign 调用,服务提供方拿不到 request 的错误
    CF1542D
  • 原文地址:https://www.cnblogs.com/rxbook/p/10452549.html
Copyright © 2011-2022 走看看