PHP设计模式--策略模式

59 阅读1分钟
<?php
class NorthRestaurant{
    public function fan(){
        echo '面条<br/>';
    }
    public function cai(){
        echo '炒菜<br/>';
    }
    public function tang(){
        echo '蛋花汤<br/>';
    }

}

class SouthRestaurant{
    public function fan(){
        echo '米饭<br/>';
    }
    public function cai(){
        echo '烧菜<br/>';
    }
    public function tang(){
        echo '紫菜汤<br/>';
    }

}

class DF{
    protected $fanCreator = null;
    protected $caiCreator = null;
    protected $tangCreator = null;

    public function __construct($f,$c,$t){
        $this->fanCreator = $f;
        $this->caiCreator = $c;
        $this->tangCreator = $t;
    }

    public function makeFan(){
        $this->fanCreator->fan();
    }
    public function makeCai(){
        $this->caiCreator->cai();
    }
    public function makeTang(){
        $this->tangCreator->tang();
    }
}

$fd = new DF(new NorthRestaurant(),new NorthRestaurant(),new SouthRestaurant());
$fd->makeCai();
$fd->makeTang();

给什么厨师做什么饭,没有区分南北饭店那么死。 最后,在客户端按需调用合适的选择。

  • 是不是非常简单的一个设计模式。大家有没有发现这个模式和我们最早讲过的简单工厂非常类似
  • 那么他们的区别呢?
  • 工厂相关的模式属于创建型模式,顾名思义,这种模式是用来创建对象的,返回的是new出来的对象。要调用对象的什么方法是由客户端来决定的
  • 而策略模式属性行为型模式,通过执行上下文,将要调用的函数方法封装了起来,客户端只需要调用执行上下文的方法就可以了

感谢分享:mp.weixin.qq.com/s?__biz=MzI…