策略模式:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式
使用策略模式实现Ioc, 依赖倒置, 控制反转
假如一个电商网站系统,针对不同的人群要跳转到不同的商品类目,并且所有广告位展示不同的广告
1.不会因为上下文的改变而改变代码(传统都是使用
if
else
来判断)
2.如果新增加一种类型的用户,只需要增加一种策略就好了,不需要在代码中if
else
里面在继续添加逻辑
3.不同的地方只需要执行不同的策略就好了,这样即可解决问题
4.从硬编码到解耦的使用
5.最主要的是解决了程序中的分支逻辑
interface UserStrategy {
function showAd();
function showCategory();
}
class FemaleUserStrategy implements UserStrategy {
function showAd()
{
echo "2014新款女装";
}
function showCategory()
{
echo "服装";
}
}
class MaleUserStrategy implements UserStrategy {
function showAd()
{
echo "IPhone6";
}
function showCategory()
{
echo "电子产品";
}
}
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();
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wjc19911118/article/details/46849703