搜尋
首頁後端開發php教程php中的设计模式之--中介模式_PHP教程

php中的设计模式之--中介模式

<?php 

/*
中介者模式是一种行为型模式,它包装了一系列对象相互作用的方式,
使得这些对象不必相互明显作用,从而使它们可以松散偶合。当某些对象之间的作用发生改变时,
不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。
定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。

主要角色
?	中介者(Mediator)角色:定义了对象间相互作用的接口(房产中介)
?	具体中介者(ConcreteMediator)角色:实现了中介者定义的接口。
.   如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类
?	具体对象(ConcreteColleague)角色:通过中介者和别的对象进行交互(房东)

中介者模式的优点
	适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。
	使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。
	使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。
	用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以
	独立地改变它们之间的交互
	 

QQ聊天系统就是一个中介模式 ,
		<---->朋友1 
我<-->QQ <---->朋友2 
	   	<---->朋友13

*/

// 抽象中介,QQ聊天 

 interface ChatMediator { // 中介者角色
      public function  sendMessage($msg,$user);
      public function  addQQUser($user);
} 


// 抽象用户
 abstract class User {
    protected  $mediator;
    protected  $name;
     
    public function __construct($med, $name){
        $this->mediator = $med;
		$this->name = $name;
    }
     
    public abstract function send($msg);
    public abstract function receive($msg);
}


  class QQchat implements ChatMediator {
 
 // 用户列表 
    private $users;
     
    public function __construct(){
        $this->users = null ;
    }
     
  // 添加用户 
    public function  addQQUser($user){
		 $this->users[] = $user; 
    }
     
	//  发送具体的QQ信息通过QQ发送 
    public function sendMessage($msg, $user) {
        foreach($this->users as $k =>$v){
           // 自己发送的自己不能接受  
            if($v != $user){
		  // 调用好友的接口  
                $v->receive($msg);
            }
        }
    }
 
}



// 具体对象角色
 class QQUser extends User {
    public function send($msg){
        $this->mediator->sendMessage($msg, $this);
    }
	
	// 接受  
    public function receive($msg) {
       	echo $this->name.&#39;  receive &#39;.$msg.&#39;<br>&#39; ;
    }
 
}
 

 
 // client
 // 中介为QQ
	$QQchat = new QQchat();
	$oMe = new QQUser($QQchat, "张三");
	$oFriend1 = new QQUser($QQchat, "李四");
	$oFriend2 = new QQUser($QQchat, "王伟");
	$oFriend3 = new QQUser($QQchat, "大哥");
	// 添加好友 
	$QQchat->addQQUser($oMe);
	$QQchat->addQQUser($oFriend1);
	$QQchat->addQQUser($oFriend2);
	$QQchat->addQQUser($oFriend3);
	 
	$oMe->send("Hi All");
		
		







www.bkjia.comtruehttp://www.bkjia.com/PHPjc/953321.htmlTechArticlephp中的设计模式之--中介模式 朋友1 我 QQ 朋友2 朋友13*/// 抽象中介,QQ聊天 interface ChatMediator { // 中介者角色 public function sendMessage($msg,$user)...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP依賴注入容器:快速啟動PHP依賴注入容器:快速啟動May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入與服務定位器PHP中的依賴注入與服務定位器May 13, 2025 am 12:10 AM

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

PHP性能優化策略。PHP性能優化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP電子郵件驗證:確保正確發送電子郵件PHP電子郵件驗證:確保正確發送電子郵件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境