策略模式:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式
使用策略模式实现Ioc, 依赖倒置, 控制反转
假如一个电商网站系统,针对不同的人群要跳转到不同的商品类目,并且所有广告位展示不同的广告
1.不会因为上下文的改变而改变代码(传统都是使用 if else 来判断)
2.如果新增加一种类型的用户,只需要增加一种策略就好了,不需要在代码中 if else 里面在继续添加逻辑
3.不同的地方只需要执行不同的策略就好了,这样即可解决问题
4.从硬编码到解耦的使用
5.最主要的是解决了程序中的分支逻辑
interface UserStrategy { function showAd(); function showCategory();}
5.2定义女性用户的策略
html' target='_blank'>class FemaleUserStrategy implements UserStrategy { function showAd() { echo '2014新款女装'; } function showCategory() { echo '服装'; }}
5.3定义男性用户的策略
class MaleUserStrategy implements UserStrategy { function showAd() { echo 'IPhone6'; } function showCategory() { echo '电子产品'; }}
6. 页面展示与使用
class Page{ //保存策略对象 protected $strategy; //首页信息输出 function index(){ //传统写法,与输出 if (isset($_GET['famale'])) { echo '女性'; }else if (isset($_GET['famale'])) { echo '男性'; } //如果新增了业务逻辑后面会很多的 if else //策略模式的输出 echo $this->strategy->showAd(); echo '<br>'; echo $this->strategy->showCategory(); } //策略模式来解决,注册策略 function setStrategy(UserStrategy $strategy){ $this->strategy = $strategy; }}//执行$page = new Page;//这里根据实际上下文的环境if (isset($_GET['famale'])) { $strategy = new FemaleUserStrategy();}else if (isset($_GET['famale'])) { $strategy = new MaleUserStrategy();}//使依赖关系反转,最终执行在使用关系绑定,输出结果(解决了传统写法的耦合问题)$page->setStrategy($strategy);$page->index();
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答