最新消息:

设计模式之策略模式

PHP 331浏览 0评论

基本定义:

将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式。

应用场景举例:

例如一个电商网站系统,需要针对不同性别用户跳转到不同的商品类目,并且所有广告位展示不同的广告数据。

接下来直接上代码说明:

/**
* 定义接口
*/
interface UserStrategy
{
    function showAd();
    
    function category();
}

定义男性类并实现用户接口类:

class MaleUser implements UserStrategy
{
    function showAd()
    {
        // TODO: Implement showAd() method.
        echo '游戏机';
    }
    
    function category()
    {
        // TODO: Implement category() method.
        echo '电子产品';
    }
}

定义女性用户类并实现用户接口类:

class FemaleUser implements UserStrategy
{
    function showAd()
    {
        // TODO: Implement showAd() method.
        echo '甜甜圈';
    }
    
    function category()
    {
        // TODO: Implement category() method.
        echo '美食';
    }
}

定义业务类

class Service
{
    /**
     * @var UserStrategy
     */
    protected $strategy;
    
    function index()
    {
        $this->strategy->showAd();
        $this->strategy->category();
    }
    
    function setStrategy(UserStrategy $strategy)
    {
        $this->strategy = $strategy;
    }
}

调用策略

$service = new \Strategy\Service();
if (isset($_GET['male'])){
    $strategy = new \Strategy\MaleUser();
}else{
    $strategy = new \Strategy\FemaleUser();
}

//设置策略
$service->setStrategy($strategy);

//正常业务调用
$service->index();

以上就是策略模式实现的简单例子,我们可以通过不同参数传入,设置不同策略,然后调用执行。

从上面例子可以看出,原本用户类User 和 业务类Service  是紧耦合关系,通过设置策略,使得用户类 User 与业务类解耦,倒置了依赖关系,实现了控制反转,并且User类还可以同级无限扩展。

转载请注明:微刻 blog.wecot.cn » 设计模式之策略模式

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址