首页 > 编程语言 >php中介者模式

php中介者模式

时间:2022-11-17 12:38:34浏览次数:43  
标签:function Declared mediator 模式 中介 message php public


概念

 

中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中不是特别常用的设计模式。 

 

场景

1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。

2、机场调度系统。

3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

 

优点

1、降低了类的复杂度,将一对多转化成了一对一。

2、各个类之间的解耦。

3、符合迪米特原则。

缺点

中介者会庞大,变得复杂难以维护。

 

角色    

1、中介者接口(UnitedNations):在里面定义了各个同事之间相互交互所需要的方法。

2、具体的中介者实现对象(UnitedCommit):它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

3、同事类的定义(Country):通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,

4、具体的同事类(China):实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

示例


<?php

//中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。
//同事类定义:比如,每个具体同事类都应该知道中介者对象,也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。

//抽象国家
abstract class Country
{
protected $mediator;

public function __construct(UnitedNations $_mediator)
{
$this->mediator = $_mediator;
}
}

//具体国家类
//美国
class USA extends Country
{
function __construct(UnitedNations $mediator)
{
parent::__construct($mediator);
}

//声明
public function Declared($message)
{
$this->mediator->Declared($message, $this);
}

//获得消息
public function GetMessage($message)
{
echo "美国获得对方消息:$message<br/>";
}
}

//中国
class China extends Country
{
public function __construct(UnitedNations $mediator)
{
parent::__construct($mediator);
}

//声明
public function Declared($message)
{
$this->mediator->Declared($message, $this);
}

//获得消息
public function GetMessage($message)
{
echo "中方获得对方消息:$message<br/>";
}
}

//抽象中介者
//抽象联合国机构
abstract class UnitedNations
{
//声明
public abstract function Declared($message, Country $colleague);
}

//联合国机构
class UnitedCommit extends UnitedNations
{
public $countryUsa;
public $countryChina;

//声明
public function Declared($message, Country $colleague)
{
if ($colleague == $this->countryChina) {
$this->countryUsa->GetMessage($message);
} else {
$this->countryChina->GetMessage($message);
}
}
}




//测试代码块
$UNSC = new UnitedCommit();
$c1 = new USA($UNSC);
$c2 = new China($UNSC);
$UNSC->countryChina = $c2;
$UNSC->countryUsa = $c1;
$c1->Declared("姚明的篮球打的就是好");
$c2->Declared("谢谢。");


 

 

标签:function,Declared,mediator,模式,中介,message,php,public
From: https://blog.51cto.com/u_6353447/5860634

相关文章

  • the real ugly parts of PHP (ZZ)
    来源:https://www.amazon.com/gp/customer-reviews/R2D9T7KNTHFC5A IshouldwarnthereaderthatIneverwasaPHPenthousiastinspiteofbeingable,though,to......
  • php 反序列化字符串逃逸
    这里总结一下反序列化字符串逃逸的知识点反序列化字符串逃逸分为被过滤后字符增多和字符减少的情况这里就不讲之前的基础知识了大家看其它师傅写的博客就可以了很多师......
  • 软件设计模式白话文系列(十二)组合模式
    1、模式描述组合模式属于结构型模式,把多个对象组成树状结构来表示局部与整体,这样用户可以以相同的方式对待单个对象和组合对象。需要注意的是这里的组合和之前系列中,我们......
  • CTFshow刷题日记-WEB-PHP特性(下篇123-150)
    web123,125,126error_reporting(0);highlight_file(__FILE__);include("flag.php");$a=$_SERVER['argv'];$c=$_POST['fun'];if(isset($_POST['CTF_SHOW'])&&isset($_POST['C......
  • 工厂模式
    工厂模式应该是用的频次最高的,他管理着对对象的创建。下面简单介绍下简单工厂、工厂方法、抽象工厂。一、简单工厂应该是其中最简单最直接明了的,一个接口、N个实现,再一组......
  • 010005 PHP 第一个计算长方体的体积公式
    <?phpheader('Content-Type:text/html;charset=utf-8');include'./assets/php/head.php';/***第一个计算长方体的体积公式*已知长是40-10,宽是30+20,高是35*2......
  • php面向对象 final关键字
    //final修饰的类无法被子类继承finalclasshuman{}classmanextendshuman{}$m=newman();//Fatalerror:Classmanmaynotinheritfromfinalclass(human)//......
  • php的几种输出函数
    php输出函数函数名功能描述echo()输出字符串print()输出一个或多个字符串print_r()打印关于变量的易于理解的信息printf()输出格式化字符串sprintf()......
  • 06.适配器模式
    适配器模式作为两个不兼容的接口之间的桥梁结合了两个独立接口的功能例如实际中有个两孔的插座,现在需要有个三孔的插口,如果不直接在两孔的class修改,就需要加一个适配cla......
  • apache启动遇到phpinfo只显示源码问题
    在安装php和apache的时候,会遇到只显示源码的问题网上找了好多帖子都是在改php.ini的东西,但是改了半天也不对,发现我安装的wordpress目录也打不开,所以我认为这就是apache服......