您的位置:58编程 > 中介者模式java PHP 中介者模式

中介者模式java PHP 中介者模式

2023-05-14 10:33 PHP设计模式

中介者模式java PHP 中介者模式

中介者模式java PHP 中介者模式

中介者模式java

目的

这种模式提供了一种简单的解耦多组件之间的协同工作方式。如果你有一个“智能中心”,比如控制器(但不是 MVC 的意义上),它是观察者的一个很好的替代品。

所有组件(称为同事)仅与 Mediator 接口耦合,这是一件好事,因为在 OOP 中,一个好朋友胜过多个。这是这种模式的关键特征。

UML 图

Alt Mediator UML Diagram

代码

Mediator.php

<?php

declare(strict_types=1);

namespace DesignPatternsBehavioralMediator;

interface Mediator
{
    public function getUser(string $username): string;
}

Colleague.php

<?php

declare(strict_types=1);

namespace DesignPatternsBehavioralMediator;

abstract class Colleague
{
    protected Mediator $mediator;

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

Ui.php

<?php

declare(strict_types=1);

namespace DesignPatternsBehavioralMediator;

class Ui extends Colleague
{
    public function outputUserInfo(string $username)
    {
        echo $this->mediator->getUser($username);
    }
}

UserRepository.php

<?php

declare(strict_types=1);

namespace DesignPatternsBehavioralMediator;

class UserRepository extends Colleague
{
    public function getUserName(string $user): string
    {
        return "User: " . $user;
    }
}

UserRepositoryUiMediator.php

<?php

declare(strict_types=1);

namespace DesignPatternsBehavioralMediator;

class UserRepositoryUiMediator implements Mediator
{
    public function __construct(private UserRepository $userRepository, private Ui $ui)
    {
        $this->userRepository->setMediator($this);
        $this->ui->setMediator($this);
    }

    public function printInfoAbout(string $user)
    {
        $this->ui->outputUserInfo($user);
    }

    public function getUser(string $username): string
    {
        return $this->userRepository->getUserName($username);
    }
}

测试

Tests/MediatorTest.php

<?php

declare(strict_types=1);

namespace DesignPatternsTestsMediatorTests;

use DesignPatternsBehavioralMediatorUi;
use DesignPatternsBehavioralMediatorUserRepository;
use DesignPatternsBehavioralMediatorUserRepositoryUiMediator;
use PHPUnitFrameworkTestCase;

class MediatorTest extends TestCase
{
    public function testOutputHelloWorld()
    {
        $mediator = new UserRepositoryUiMediator(new UserRepository(), new Ui());

        $this->expectOutputString("User: Dominik");
        $mediator->printInfoAbout("Dominik");
    }
}


阅读全文
以上是58编程为你收集整理的中介者模式java PHP 中介者模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58编程 58biancheng.com 版权所有 联系我们
桂ICP备12005667号-32 Powered by CMS