设计模式之策略模式

设计模式之策略模式


  • 面向对象中有什么比是什么更灵活
  • 组合比继承更灵活
  • 饭店和厨师的关系 是 一对多
  • 比如新开饭店 如果单纯的复制饭店 这样不能会造成很多浪费的方法 但是如果以饭店拥有厨师的方式处理 那么 饭店的样式可以随机变换,因此首先声明一个饭店类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class FD
{
protected $tangCreator = null;
protected $caiCreator = null;
protected $fanCreator = null;

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

public function createFan() {
return $this->fanCreator->fan();
}

public function createCai() {
return $this->caiCreator->cai();
}

public function createTang() {
return $this->tangCreator->tang();
}
}

再声明厨师类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class SouthDinner {
public function fan() {
return '米饭';
}

public function cai() {
return '甜食';
}

public function tang() {
return '蛋花汤';
}
}

class NorthDinner {
public function fan() {
return '馒头';
}

public function cai() {
return '炒菜';
}

public function tang() {
return '粥';
}
}

最后调用

1
2
3
4
$fd = new FD(new SouthDinner(),new NorthDinner(),new SouthDinner());

echo $fd->createCai(),'<br>';
echo $fd->createTang(),'<br>';