课程名称:大话PHP设计模式
课程章节: 7-1策略模式简介 7-2策略模式的实现和使用 7-3策略模式的控制反转
课程链接
主讲老师:Rango
课程内容:
首先开头简单介绍了下策略模式的概念,然后用代码演示了策略模式的实现和使用,实现了代码的解耦
课程收获:
1、策略模式简介
策略模式
将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式
实际应用举例
假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告
策略模式其他用途
使用策略模式可以实Ioc,依赖倒置、控制反转
2、策略模式的实现和使用
interface UserStrategy
{
function showAd();
function showCategory();
}
class FemaleUserStrategy implements UserStrategy
{
function showAd()
{
echo "2022新款女装";
}
function showCategory()
{
echo "女装";
}
}
class MaleUserStrategy implements UserStrategy
{
function showAd()
{
echo "iPhone 14";
}
function showCategory()
{
echo "电子产品";
}
}
class Page
{
protected $strategy;
function index()
{
echo "AD:";
$this->strategy->showAd();
echo "<br />";
echo "Category:";
$this->strategy->showCategory();
echo "<br />";
}
function setStrategy(UserStrategy $strategy)
{
$this->strategy = $strategy;
}
}
$page = new Page;
if(isset($__GET['female'])){
$strategy = new FemaleUserStrategy;
} else {
$strategy = new MaleUserStrategy;
}
$page->setStrategy($strategy);
$page->index();
3、策略模式的控制反转
依赖倒置原则(Dependence Inversion Principle, DIP),是一种软件设计思想。传统软件设计中,上层代码依赖于下层代码,当下层出现变动时, 上层代码也要相应变化,维护成本较高。而DIP的核心思想是上层定义接口,下层实现这个接口, 从而使得下层依赖于上层,降低耦合度,提高整个系统的弹性。这是一种经实践证明的有效策略。
代码实现
class EmailSenderByQq
{
public function send()
{
}
}
class User
{
private $_emailSenderObject;
public function __construct($emailSenderObject)
{
$this->_emailSenderObject = $emailSenderObject;
}
public function register()
{
// other code
$this->_emailSenderObject->send();
}
}
$emailSenderObject = new EmailSenderByQq;
$user = new User($emailSenderObject);
$user->register();