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();
原文地址:https://www.cnblogs.com/rxbook/p/10452549.html