php 设计模式(策略模式)

/**
 * 策略模式是将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这就是策略模式
 */
/**
 * 电商类网站,针对男生和女生要跳到不同的商品类目,并且所有广告位展示不同的广告
 * 代码中会出现if男生 if女生...硬编码 当需求改变时所有代码都需要改变,这种情况就需要使用 策略模式因为策略模式
 * 跟上下文的环境是中立的没有依赖,实现解耦,策略模式可以实现IOC,依赖倒置控制反转
 */
interface UserStrategy{
    public function showAD();
    public function showCategory();
}
//添加男性策略
class UserMan implements UserStrategy{
    public function showAD(){
        echo '男士新装';
    }
    public function showCategory(){
        echo '男士目录';
    }
}
//添加女士策略
class UserWman implements UserStrategy{
    public function showAD(){
        echo '女士新装';
    }
    public function showCategory(){
        echo '女士目录';
    }
}
//使用
class Page{
    protected $strategy;
    public function show(){
        $this->strategy->showAD();
        $this->strategy->showCategory();
    }

    public function getCategory(UserStrategy $strategy){
        $this->strategy = $strategy;
    }
}

$page = new Page();

if(isset($_GET['nvsheng'])){
    $strategy = new UserWman();
} else {
    $strategy = new UserMan();
}
//当需求改变时只需要添加一个策略,在获得策略实例之前 创建新策略的实例即可(实现了解耦)
$page->getCategory($strategy);
$page->show();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值