首先要理解什么是策略。我个人理解这个词可以理解为解决方案
。也就是你解决一个问题有多种解决方案的时候,可以选择策略模式,比如返回数据的格式,可以是 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
这两个类,只是负责写相应的业务处理,实例中是不会直接调用这两个类的 - 工作中要使用
HowShow
这个类去处理相应的业务,如果切换策略,直接切换传递的参数即可
- 工作中要使用
- 5.当然你也可以将
ShowAll|ShowOne
以工厂模式整合,这样传递的参数直接是one|all
即可,但是我觉得完全没有必要。因为你传递参数的时候还是需要落实到实际的ShowAll|ShowOne
类, 设计模式本来就是为了方便你的工作,不要为了设计而设计。
网友评论