首页 > 编程语言 >浅谈PHP设计模式的中介者模式

浅谈PHP设计模式的中介者模式

时间:2023-01-26 17:11:39浏览次数:50  
标签:function PHP 浅谈 mediator void 中介 echo 设计模式 public

简介:

中介者模式,属于行为型的设计模式。用一个中介对象来封装一系列的对象交互。中介者是各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

适用场景:

如果平行对象间的依赖复杂,可以使用中介者解耦。

优点:

符合迪米特法则,减少成员间的依赖。

缺点:

不适用于系统出现对象多对多的的复杂场景时。

代码:

 *Mediator接口声明了组件用于向*中介通知各种事件的方法。中介可能会对这些事件做出反应,并将执行传递给其他组件。
 */
interface Mediator
{
    public function notify(object $sender, string $event): void;
}

/**
 *具体中介通过协调几个组件来实现协作行为。
 */
class ConcreteMediator implements Mediator
{
    private $component1;

    private $component2;

    public function __construct(Component1 $c1, Component2 $c2)
    {
        $this->component1 = $c1;
        $this->component1->setMediator($this);
        $this->component2 = $c2;
        $this->component2->setMediator($this);
    }

    public function notify(object $sender, string $event): void
    {
        if ($event == "A") {
            echo "中介者对A作出反应并触发以下操作:\n";
            $this->component2->doC();
        }

        if ($event == "D") {
            echo "中介者对D作出反应并触发以下操作:\n";
            $this->component1->doB();
            $this->component2->doC();
        }
    }
}

/**
 *基本组件提供了在组件对象内存储中介器*实例的基本功能。
 */
class BaseComponent
{
    protected $mediator;

    public function __construct(Mediator $mediator = null)
    {
        $this->mediator = $mediator;
    }

    public function setMediator(Mediator $mediator): void
    {
        $this->mediator = $mediator;
    }
}

/**
 *具体组件实现各种功能。它们不依赖于其他组件。它们也不依赖于任何具体的中介类
 */
class Component1 extends BaseComponent
{
    public function doA(): void
    {
        echo "Component 1 does A.\n";
        $this->mediator->notify($this, "A");
    }

    public function doB(): void
    {
        echo "Component 1 does B.\n";
        $this->mediator->notify($this, "B");
    }
}

class Component2 extends BaseComponent
{
    public function doC(): void
    {
        echo "Component 2 does C.\n";
        $this->mediator->notify($this, "C");
    }

    public function doD(): void
    {
        echo "Component 2 does D.\n";
        $this->mediator->notify($this, "D");
    }
}

//调用端
$c1 = new Component1();
$c2 = new Component2();
$mediator = new ConcreteMediator($c1, $c2);

echo "客户端触发操作A。\n";
$c1->doA();

echo "\n";
echo "客户端触发操作D。\n";
$c2->doD();

标签:function,PHP,浅谈,mediator,void,中介,echo,设计模式,public
From: https://www.cnblogs.com/phpphp/p/17067933.html

相关文章

  • PHP获取微信JS-SDK接口设置(access_token、jsapi_ticket、signature)
    前端引入JS文件<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>或<scriptsrc="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script......
  • ThinkPHP函数详解:cache方法
    cache方法是3.0版本开始新增的缓存管理方法。注意:3.1.2版本后因cache方法并入原S方法,所以cache方法不再建议使用,用S方法即可。cache用于缓存设置、获取、删除操作用......
  • 浅谈PHP设计模式的命令模式
    简介:命令模式:属于行为型的设计模式。将一个请求封装为一个对象,从而是你可用不同的请求对客户端进行参数化。对请求排队或记录请求日志,以及支持可撤销的操作。适用场景:命......
  • 基于PHP语言Laravel9+Vue+ElementUI搭建的Web项目框架
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • PHP语言Laravel9+Layui后台权限管理系统
    项目介绍一款PHP语言基于Laravel9.x、Layui、MySQL等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着......
  • 基于PHP实现的Laravel9+Vue+ElementUI大数据分析管理系统
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • PHP语言的Laravel9+Vue+ElementUI开源框架推荐
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • 浅谈SOFAJRaft中的ShutdownHook
    Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。而在SOFAJ......
  • 浅谈PHP设计模式的组合模式
    简介:组合模式,属于结构型的设计模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式分两种状态......
  • 适合编程初学者的开源云笔记系统(PHP版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。让想学编程的,一个都不落下。上述基本涵盖了当前编程开发所有主流语言。左侧为前端版本:安卓、iOS、鸿蒙......