码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2020-02-19 00:59:25      阅读:89      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!