<?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出来的对象。要调用对象的什么方法是由客户端来决定的
- 而策略模式属性行为型模式,通过执行上下文,将要调用的函数方法封装了起来,客户端只需要调用执行上下文的方法就可以了