美文网首页
策略模式

策略模式

作者: 云龙789 | 来源:发表于2019-01-28 18:00 被阅读20次

首先要理解什么是策略。我个人理解这个词可以理解为解决方案。也就是你解决一个问题有多种解决方案的时候,可以选择策略模式,比如返回数据的格式,可以是 json 格式,可以是 array 格式的场景。
生活中,我觉得策略大家比较好理解的一个场景就是看房的时候,
一般的销售经理只会给你看一栋楼房,说其他的都已经卖完了,这其实就是一种策略。
那么我们按照这种场景来写一个 demo

<?php

/**
 *  看房接口
 * Interface Building
 */
interface Building
{
    public function show();
}

/**
 * 策略1 给看护看所有楼房
 * Class ShowAll
 */
class ShowAll implements Building
{
    public function show()
    {
        return 'you can see all house';
    }
}


/**
 * 策略2 给客户只看一栋楼
 * Class ShowOne
 */
class ShowOne implements Building
{
    public function show()
    {
        return 'you can only see one building house';
    }
}

/**
 * 工作中使用的类
 * Class HowShow
 */
class HowShow
{
    /**
     * @var Building  // 此处直接追踪抽象类即可,如果你想追踪 ShowAll|ShowOne 当然也是可以的
     */
    private $showType;

    public function __construct($showType)
    {
        $this->showType = $showType;
    }

    public function show()
    {
        return $this->showType->show();
    }
}
//  使用
$see = new HowShow(new ShowOne());
echo $see->show();

  • 总结
  • 1.希望大家能够写好注释,这样才会方便追踪代码
  • 2.策略模式必须先预定义一个接口,和相应的方法。此处 demo 是 Building
  • 3 ShowAll|ShowOne 这两个类,只是负责写相应的业务处理,实例中是不会直接调用这两个类的
    1. 工作中要使用 HowShow 这个类去处理相应的业务,如果切换策略,直接切换传递的参数即可
  • 5.当然你也可以将 ShowAll|ShowOne 以工厂模式整合,这样传递的参数直接是 one|all 即可,但是我觉得完全没有必要。因为你传递参数的时候还是需要落实到实际的ShowAll|ShowOne类, 设计模式本来就是为了方便你的工作,不要为了设计而设计。

相关文章

网友评论

      本文标题:策略模式

      本文链接:https://www.haomeiwen.com/subject/eqxzjqtx.html