日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php中介者,PHP设计模式 - 中介者模式

發(fā)布時(shí)間:2023/12/10 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中介者,PHP设计模式 - 中介者模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【一】模式定義

中介者模式(Mediator)就是用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。

對(duì)于中介對(duì)象而言,所有相互交互的對(duì)象,都視為同事類,中介對(duì)象就是用來維護(hù)各個(gè)同事對(duì)象之間的關(guān)系,所有的同事類都只和中介對(duì)象交互,也就是說,中介對(duì)象是需要知道所有的同事對(duì)象的。當(dāng)一個(gè)同事對(duì)象自身發(fā)生變化時(shí),它是不知道會(huì)對(duì)其他同事對(duì)象產(chǎn)生什么影響,它只需要通知中介對(duì)象,“我發(fā)生變化了”,中介對(duì)象會(huì)去和其他同事對(duì)象進(jìn)行交互的。這樣一來,同事對(duì)象之間的依賴就沒有了。有了中介者之后,所有的交互都封裝在了中介對(duì)象里面,各個(gè)對(duì)象只需要關(guān)心自己能做什么就行,不需要再關(guān)心做了之后會(huì)對(duì)其他對(duì)象產(chǎn)生什么影響,也就是無需再維護(hù)這些關(guān)系了。

【二】UML類圖

【三】示例代碼

MediatorInterface.php

namespace?DesignPatterns\Behavioral\Mediator;

/**

*?MediatorInterface是一個(gè)中介者契約

*?該接口不是強(qiáng)制的,但是使用它更加符合里氏替換原則

*/

interface?MediatorInterface

{

/**

*?發(fā)送響應(yīng)

*

*?@param?string?$content

*/

public?function?sendResponse($content);

/**

*?發(fā)起請(qǐng)求

*/

public?function?makeRequest();

/**

*?查詢數(shù)據(jù)庫(kù)

*/

public?function?queryDb();

}

Mediator.php

namespace?DesignPatterns\Behavioral\Mediator;

use?DesignPatterns\Behavioral\Mediator\Subsystem;

/**

*?Mediator是中介者模式的具體實(shí)現(xiàn)類

*?In?this?example,?I?have?made?a?"Hello?World"?with?the?Mediator?Pattern.

*/

class?Mediator?implements?MediatorInterface

{

/**

*?@var?Subsystem\Server

*/

protected?$server;

/**

*?@var?Subsystem\Database

*/

protected?$database;

/**

*?@var?Subsystem\Client

*/

protected?$client;

/**

*?@param?Subsystem\Database?$db

*?@param?Subsystem\Client???$cl

*?@param?Subsystem\Server???$srv

*/

public?function?setColleague(Subsystem\Database?$db,?Subsystem\Client?$cl,?Subsystem\Server?$srv)

{

$this->database?=?$db;

$this->server?=?$srv;

$this->client?=?$cl;

}

/**

*?發(fā)起請(qǐng)求

*/

public?function?makeRequest()

{

$this->server->process();

}

/**

*?查詢數(shù)據(jù)庫(kù)

*?@return?mixed

*/

public?function?queryDb()

{

return?$this->database->getData();

}

/**

*?發(fā)送響應(yīng)

*

*?@param?string?$content

*/

public?function?sendResponse($content)

{

$this->client->output($content);

}

}

Colleague.php

namespace?DesignPatterns\Behavioral\Mediator;

/**

*?Colleague是一個(gè)抽象的同事類,但是它只知道中介者M(jìn)ediator,而不知道其他同事

*/

abstract?class?Colleague

{

/**

*?this?ensures?no?change?in?subclasses

*

*?@var?MediatorInterface

*/

private?$mediator;

/**

*?@param?MediatorInterface?$medium

*/

public?function?__construct(MediatorInterface?$medium)

{

$this->mediator?=?$medium;

}

//?for?subclasses

protected?function?getMediator()

{

return?$this->mediator;

}

}

Subsystem/Client.php

namespace?DesignPatterns\Behavioral\Mediator\Subsystem;

use?DesignPatterns\Behavioral\Mediator\Colleague;

/**

*?Client是發(fā)起請(qǐng)求&獲取響應(yīng)的客戶端

*/

class?Client?extends?Colleague

{

/**

*?request

*/

public?function?request()

{

$this->getMediator()->makeRequest();

}

/**

*?output?content

*

*?@param?string?$content

*/

public?function?output($content)

{

echo?$content;

}

}

Subsystem/Database.php

namespace?DesignPatterns\Behavioral\Mediator\Subsystem;

use?DesignPatterns\Behavioral\Mediator\Colleague;

/**

*?Database提供數(shù)據(jù)庫(kù)服務(wù)

*/

class?Database?extends?Colleague

{

/**

*?@return?string

*/

public?function?getData()

{

return?"World";

}

}

Subsystem/Server.php

namespace?DesignPatterns\Behavioral\Mediator\Subsystem;

use?DesignPatterns\Behavioral\Mediator\Colleague;

/**

*?Server用于發(fā)送響應(yīng)

*/

class?Server?extends?Colleague

{

/**

*?process?on?server

*/

public?function?process()

{

$data?=?$this->getMediator()->queryDb();

$this->getMediator()->sendResponse("Hello?$data");

}

}

【四】測(cè)試代碼

Tests/MediatorTest.php

namespace?DesignPatterns\Tests\Mediator\Tests;

use?DesignPatterns\Behavioral\Mediator\Mediator;

use?DesignPatterns\Behavioral\Mediator\Subsystem\Database;

use?DesignPatterns\Behavioral\Mediator\Subsystem\Client;

use?DesignPatterns\Behavioral\Mediator\Subsystem\Server;

/**

*?MediatorTest?tests?hello?world

*/

class?MediatorTest?extends?\PHPUnit_Framework_TestCase

{

protected?$client;

protected?function?setUp()

{

$media?=?new?Mediator();

$this->client?=?new?Client($media);

$media->setColleague(new?Database($media),?$this->client,?new?Server($media));

}

public?function?testOutputHelloWorld()

{

//?測(cè)試是否輸出?Hello?World?:

$this->expectOutputString('Hello?World');

//?正如你所看到的,?Client,?Server?和?Database?是完全解耦的

$this->client->request();

}

}

【五】總結(jié)

中介者主要是通過中介對(duì)象來封裝對(duì)象之間的關(guān)系,使之各個(gè)對(duì)象在不需要知道其他對(duì)象的具體信息情況下通過中介者對(duì)象來與之通信。同時(shí)通過引用中介者對(duì)象來減少系統(tǒng)對(duì)象之間關(guān)系,提高了對(duì)象的可復(fù)用和系統(tǒng)的可擴(kuò)展性。但是就是因?yàn)橹薪檎邔?duì)象封裝了對(duì)象之間的關(guān)聯(lián)關(guān)系,導(dǎo)致中介者對(duì)象變得比較龐大,所承擔(dān)的責(zé)任也比較多。它需要知道每個(gè)對(duì)象和他們之間的交互細(xì)節(jié),如果它出問題,將會(huì)導(dǎo)致整個(gè)系統(tǒng)都會(huì)出問題。

總結(jié)

以上是生活随笔為你收集整理的php中介者,PHP设计模式 - 中介者模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人a | 日韩综合网 | 美女网站免费观看 | 在线综合视频 | 天天看视频 | 黄黄视频在线观看 | 黄频网站在线观看 | 免费jizz | 国产成人无码精品久久久久久 | 国产女人呻吟高潮抽搐声 | 国产精品久久久爽爽爽麻豆色哟哟 | 蜜桃视频无码区在线观看 | 黑人糟蹋人妻hd中文字幕 | 精品视频站长推荐 | 色无极亚洲 | 四级毛片 | 日本泡妞xxxx免费视频软件 | 日韩高清在线 | 舐め犯し波多野结衣在线观看 | 久久久久久网站 | 在线看日韩av| 日本一区二区三区电影在线观看 | 一区二区影院 | 黄色高潮 | 国产91网址 | av青娱乐 | 每日在线观看av | 97自拍视频| 国产欧美一区二区视频 | 91超薄丝袜肉丝一区二区 | 精品国产97 | 日韩高清在线观看一区 | 在线观看日本网站 | 日本成人在线免费 | 爱情岛论坛亚洲自拍 | 国产日韩二区 | 精品久久久久久亚洲综合网站 | 免费看一级黄色大全 | 免费国产在线视频 | 丰满的人妻hd高清日本 | 成人亚洲综合 | 欧美国产大片 | 中文av在线播放 | 狠狠精品干练久久久无码中文字幕 | 91亚洲精品久久久蜜桃网站 | 九九九九热 | 久久国产精品系列 | 少妇综合网| 中文在线永久免费观看 | 欧美黄色一级视频 | 91精品国产乱码久久久久久久久 | 舒淇裸体午夜理伦 | 对白超刺激精彩粗话av | 日本www视频在线观看 | youjizzcom日本| 天天摸天天做天天爽水多 | 天堂草在线观看 | av小次郎收藏 | 国产精品久久一区二区三区 | 美国三级视频 | 欧美午夜精品久久久久免费视 | 欧美又粗又长 | 日韩黄色一级大片 | 婷婷视频 | 精品乱码一区内射人妻无码 | 邻居交换做爰2 | 午夜色综合| www在线观看国产 | 亚洲色视频 | 韩国黄色av | 国产精品扒开腿做爽爽 | 国产综合精品久久久久成人影 | 尤物国产 | ⅹxxxxhd亚洲日本hd老师 | 久久国产毛片 | 免费看成年人视频 | av永久在线| 国产精品天干天干 | 污视频免费在线观看 | 日本在线免费视频 | 久久99国产精品视频 | 青青草伊人网 | 欧美色交 | 99久久99久久精品国产片桃花 | 最新黄网 | 久久人人爽天天玩人人妻精品 | 热@国产| 日韩精品三区 | 性感美女被草 | 欧美午夜寂寞影院 | 另类老妇性bbwbbw图片 | 粉嫩av一区二区三区天美传媒 | 一本色道久久综合亚洲精品小说 | 佐山爱av在线 | eeuss国产一区二区三区 | 有码视频在线观看 | 天天操天天弄 | 日韩免费av一区 | 国产精品伦一区二区三级古装电影 |