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.' receive '.$msg.'<br/>' ; } } // 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");
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud
Assassin's Creed Shadows: Solution d'énigmes de coquille
4 Il y a quelques semaines
By DDD
Quoi de neuf dans Windows 11 KB5054979 et comment résoudre les problèmes de mise à jour
3 Il y a quelques semaines
By DDD
Où trouver la courte de la grue à atomide atomique
4 Il y a quelques semaines
By DDD
<🎜>: Dead Rails - Comment relever chaque défi
1 Il y a quelques mois
By DDD
Guide de l'atomfall: emplacements des articles, guides de quête et conseils
1 Il y a quelques mois
By DDD

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
