基本定义:
将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式。
应用场景举例:
例如一个电商网站系统,需要针对不同性别用户跳转到不同的商品类目,并且所有广告位展示不同的广告数据。
接下来直接上代码说明:
/** * 定义接口 */ interface UserStrategy { function showAd(); function category(); }
定义男性类并实现用户接口类:
class MaleUser implements UserStrategy { function showAd() { // TODO: Implement showAd() method. echo '游戏机'; } function category() { // TODO: Implement category() method. echo '电子产品'; } }
定义女性用户类并实现用户接口类:
class FemaleUser implements UserStrategy { function showAd() { // TODO: Implement showAd() method. echo '甜甜圈'; } function category() { // TODO: Implement category() method. echo '美食'; } }
定义业务类
class Service { /** * @var UserStrategy */ protected $strategy; function index() { $this->strategy->showAd(); $this->strategy->category(); } function setStrategy(UserStrategy $strategy) { $this->strategy = $strategy; } }
调用策略
$service = new \Strategy\Service(); if (isset($_GET['male'])){ $strategy = new \Strategy\MaleUser(); }else{ $strategy = new \Strategy\FemaleUser(); } //设置策略 $service->setStrategy($strategy); //正常业务调用 $service->index();
以上就是策略模式实现的简单例子,我们可以通过不同参数传入,设置不同策略,然后调用执行。
从上面例子可以看出,原本用户类User 和 业务类Service 是紧耦合关系,通过设置策略,使得用户类 User 与业务类解耦,倒置了依赖关系,实现了控制反转,并且User类还可以同级无限扩展。
转载请注明:微刻 blog.wecot.cn » 设计模式之策略模式