设计模式:策略模式(php实现)

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、开发三个角色,后面增加了其他角色也可以使用该方法,但是具体更细节的需要根据实际情况处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值