手记

【九月打卡】第6天--大话PHP设计模式第七章节策略模式

课程名称:大话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();

4、课程截图


0人推荐
随时随地看视频
慕课网APP