策略模式
- 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境
- 举例:例如,男女用户跳转到不同的页面,并且所有的广告位展现不同的广告, 如果某天新增了一种中性的性别,则须要在所有判断的中央进行批改,应用策略模式躲避批改
- 实现依赖倒置、管制反转
// 策略接口 约定策略的行为interface UserStrategy { public function showAD();}// 女性class FemaleUser implements UserStrategy { public function showAD(){ echo "nv"; }}// 男class MaleUser implements UserStrategy { public function showAD(){ echo "男"; }}// 展现类// page类依赖Female和MaleStrategy,然而当初只是依赖UserStrategy,Female和male依赖UserStrategy,从而实现反转,// 个别依赖反转的实现计划:一个类依赖另一个类,个别是依赖几个办法,将这几个办法形象处一个接口,依赖的类,实现这个借口,就实现了倒置 详情见DIP准则class Page { private $s; public function index(){ $this->a->showAD(); } public function setStrategy(UserStrategy $class){ $this->s = $class; }}// 只在一个中央判断,配置策略对象(Page),其余中央应用if($type=='male' ){ $obj = new MaleUser();}if($type == 'Female'){ $obj = new FemaleUser();}$p = new Page();$p->setStrategy($obj);$p->index();