标签:sse 属性 显示 category intel 开始 interface register protected
首先建立策略接口类,这是基础接口,所有的业务逻辑都必须要实现这个接口定义的方法
<?php /** * Created by IntelliJ IDEA. * User: root * Date: 2020/2/18 0018 * Time: 下午 23:12 */ namespace app; /** * 策略接口 */ interface UserStrategy { /** * 广告 * @return mixed */ public function ad(); /** * 类目 * @return mixed */ public function category(); }
建立具体的业务策略
1. 女性客户策略
<?php /** * Created by IntelliJ IDEA. * User: root * Date: 2020/2/18 0018 * Time: 下午 23:12 */ namespace app; /** * 女性策略类 * Class FemaleStrategy * @package app */ class StrategyFemale implements UserStrategy { /** * 广告 */ public function ad() { echo "这是女性客户广告"; } /** * 类名 */ public function category() { echo "这是女性客户产品类目"; } }
2. 男性客户策略
<?php /** * Created by IntelliJ IDEA. * User: root * Date: 2020/2/18 0018 * Time: 下午 23:12 */ namespace app; /** * 男性策略类 * Class StrategyFemale * @package app */ class StrategyMale implements UserStrategy { /** * 广告 */ public function ad() { echo "这是男性客户广告"; } /** * 类名 */ public function category() { echo "这是男性客户产品类目"; } }
定义好策略之后开始使用,需要定义使用入口(如果这一层不要我个人感觉就变成了适配器模式)
<?php /** * Created by IntelliJ IDEA. * User: root * Date: 2020/2/18 0018 * Time: 下午 23:12 */ namespace app; /** * 策略使用入口 * Class StrategyEntry * @package app */ class StrategyEntry { /** * 策略属性 */ protected $strategy; /** * 设置策略属性 * @param $strategy */ public function setStrategy($strategy) { $this->strategy = $strategy; } /** * 显示内容 */ public function show() { // 广告 $this->strategy->ad(); echo "<br>"; // 类目 $this->strategy->category(); } }
开始使用
<?php // 定义自动注册 spl_autoload_register(function ($class) { include $class . ‘.php‘; }); // 实例化策略入口 $gender = isset($_GET[‘female‘]) ? $_GET[‘female‘] : ‘‘; $entry = new \app\StrategyEntry(); // 根据不同性别来显示不同用户群体的策略内容 if ($gender == ‘female‘) { $strategy = new \app\StrategyFemale(); } else { $strategy = new \app\StrategyMale(); } // 设置策略 $entry->setStrategy($strategy); // 显示内容 $entry->show();
以上,我感觉策略模式就是在适配器模式的基础上多加了一层策略入口的封装,很相似
标签:sse 属性 显示 category intel 开始 interface register protected
原文地址:https://www.cnblogs.com/waterliang/p/12329445.html