美文网首页
策略模式

策略模式

作者: 云龙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