1、策略模式
1.1、简介
行为型模式:
一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
策略模式:
策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式
使用策略模式还可以实现Ioc、依赖倒置、控制反转
举例:
假如一个人电商网站系统,针对男性,女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告,如果使用if…else的硬编码方式,一旦需求发生改动,比如增加了第三性别或者隐秘性别,那么所有判断性别的if…else都需要修改。
使用策略模式后,它与上下文环境是中立的,互相不依赖。
像上方性别例子,如果新增了一种用户类型,那么只需要增加一种策略即可。其他所有的地方只需要应用不同策略即可解决该问题
1.2、代码实现
策略定义
定义UserStrategy.php接口
定义女性策略:FemaleUserStrategy.php
定义男性策略:maleUserStrategy.php
硬编码方式
硬编码方式如下,在很多个页面都需要有下方的if…else
策略模式
第一步
在入口处增加一处逻辑判断
比如tp框架中的index.php,又或者说一些后台管理系统的权限控制类Admin.php
第二步
在页面或者如果是tp框架的话在控制器中
class Page
{
protected $strategy;
function index()
{
echo "展示广告";
$this->strategy->showAd();
echo '<br/>';
echo '展示产品分类';
$this->strategy->showCategory();
echo '<br/>';
}
function setStrategy(\IMooc\UserStrategy $strategy)
{
$this->strategy = $strategy;
}
}
上方代码即实现了根据策略来减少项目中多处if … else的判断,同时在需求发生增加时,减少项目的修改时间。
具体应用还可以体现在ERP系统的角色中,比如某个ERP系统一开始只有运营、UI、开发三个角色,后面增加了其他角色也可以使用该方法,但是具体更细节的需要根据实际情况处理。