PHP设计模式之中介者模式

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


  1. <?php   
  2.     /**  
  3.      * 测试用例描述:示例代码不仅允许乐队进入和管理他们的音乐合集,而且还允许乐队更新他们的配置文件,修改乐队相关信息以及更新其CD信息  
  4.      *        现在,艺术家可上传MP3集合并从Web站点撤下CD。 因此, Web站点需要保持相对应的CD和MP3彼此同步。  
  5.      */   
  6.     //CD类   
  7.     class CD {   
  8.            
  9.         public $band  = '';   
  10.         public $title = '';   
  11.         protected $_mediator;   
  12.            
  13.         public function __construct(MusicContainerMediator $mediator = NULL) {   
  14.             $this->_mediator = $mediator;   
  15.         }   
  16.            
  17.         public function save() {   
  18.             //具体实现待定   
  19.             var_dump($this);   
  20.         }   
  21.            
  22.         public function changeBandName($bandname) {   
  23.             if ( ! is_null($this->_mediator)) {   
  24.                 $this->_mediator->change($this, array("band" => $bandname));   
  25.             }   
  26.             $this->band = $bandname;   
  27.             $this->save();   
  28.         }   
  29.     }   
  30.        
  31.     //MP3Archive类   
  32.     class MP3Archive {   
  33.            
  34.         protected $_mediator;   
  35.            
  36.         public function __construct(MusicContainerMediator $mediator = NULL) {   
  37.             $this->_mediator = $mediator;   
  38.         }   
  39.            
  40.         public function save() {   
  41.             //具体实现待定   
  42.             var_dump($this);   
  43.         }   
  44.            
  45.         public function changeBandName($bandname) {   
  46.             if ( ! is_null($this->_mediator)) {   
  47.                 $this->_mediator->change($this, array("band" => $bandname));   
  48.             }   
  49.             $this->band = $bandname;   
  50.             $this->save();   
  51.         }   
  52.     }        
  53.     //中介者类   
  54.     class MusicContainerMediator {   
  55.            
  56.         protected $_containers = array();   
  57.            
  58.         public function __construct() {   
  59.             $this->_containers[] = "CD";   
  60.             $this->_containers[] = "MP3Archive";   
  61.         }   
  62.            
  63.         public function change($originalObject, $newValue) {   
  64.             $title = $originalObject->title;   
  65.             $band  = $originalObject->band;   
  66.                
  67.             foreach ($this->_containers as $container) {   
  68.                 if ( ! ($originalObject instanceof $container)) {   
  69.                     $object = new $container;   
  70.                     $object->title = $title;   
  71.                     $object->band  = $band;   
  72.                        
  73.                     foreach ($newValue as $key => $val) {   
  74.                         $object->$key = $val;   
  75.                     }   
  76.                        
  77.                     $object->save();   
  78.                 }   
  79.             }   
  80.         }   
  81.     }   
  82.        
  83.     //测试实例   
  84.     $titleFromDB = "Waste of a Rib";   
  85.     $bandFromDB  = "Never Again";   
  86.     $mediator = new MusicContainerMediator();   
  87.     $cd = new CD($mediator);   
  88.     $cd->title = $titleFromDB;   
  89.     $cd->band  = $bandFromDB;   
  90.     $cd->changeBandName("Maybe Once More");   
  91. ?> 

 数据库脚本请参照:http://www.cxybl.com/html/wlbc/Php/2011_1126_9458.html

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索html
, 对象
, 设计模式
, 属性
, 耦合
, 中介者模式
, 中介者
中介模式
php中介者模式、中介者设计模式、php设计模式、learning php设计模式、php 设计模式 鸟哥,以便于您获取更多的相关知识。

时间: 2024-10-03 14:30:13

PHP设计模式之中介者模式的相关文章

乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 示例 有一个Message实体类,某个对象对它的操作有Send()和Insert()方法,现在用一个中介对象来封装这一系列的对象交互. MessageModel

Java设计模式之中介者模式(Mediator Pattern)简介_java

Java设计模式的中介者模式是行为模式之一.定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显式地相互引用,从而使其耦合性松散,并且可以独立地改变他们之间的交互. 如下图所示: 生产者.消费者.代理商之间的中介模式实例: public abstract class PersonColleague { protected Mediator mediator; public Mediator getMediator() { return mediator; } public void

【设计模式】—— 中介者模式Mediator

模式意图 使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合. 这个中介者常常起着中间桥梁的作用,使其他的对象可以利用中介者完成某些行为活动,因此它必须对所有的参与活动的对象了如指掌! 应用场景 1 当一组对象要进行沟通或者业务上的交互,但是其关系却又很复杂混乱时,可以采用此模式. 2 当一个对象与其他的对象要进行紧密的交互,但又想服用该对象而不依赖其他的对象时. 3 想创造一个运行于多个类之间的对象,又不想生成新的子类时. 模式结构 Mediator 抽象的中介者,定义

Java设计模式之中介者模式

一.引子 中介在现实生活中并不陌生,满大街的房屋中介.良莠不齐的出国中介--.它们的存在是因为它们能给我们的生活带来一些便利:租房.买房用不着各个小区里瞎转:出国留学也不用不知所措. 中介者模式在程序设计中也起到了类似的作用. 二.定义与结构 GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个"中介"对象,使得两头的对

深入理解JavaScript系列(36):设计模式之中介者模式详解_基础知识

介绍 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要内容来自:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/ 正文 软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信.一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行

设计模式:中介者模式(Mediator)

用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. 中介者模式中的角色: 1. 抽象中介者(Mediator):定义了同事对象到中介者对象之间的接口. 2. 具体中介者(ConcreteMediator):定义抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收消息,并且向具体的同事类发送信息. 3. 抽象同事类(Colleague) 4. 具体同事类(ConcreteColleague):每个具

C++设计模式之中介者模式_C 语言

前言 我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的.那么多的国家,国家之间的关系又及其复杂:就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明的关系:这些复杂的关系,稍微处理不好,就可能引发局部战争,更有可能引发第三次世界大战.如果出现了国与国之间出现了利益纠纷,那么该怎么办呢?这个时候,联合国出现了.联合国就是一个处理国与国之间纠纷的中介者. 中介者模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用

java设计模式之中介者模式_java

中介者模式 面向对象设计鼓励将行为分布到各个对象中, 这种分布可能会导致对象间有许多连接. 在最坏的情况下, 每一个对象都需要知道其他所有对象. 虽然将一个系统分割成许多对象可增强可复用性, 但是对象间相互连接的激增又会降低其可复用性. 大量的连接关系使得一个对象不可能在没有其他对象的协助下工作(系统表现为一个不可分割的整体), 此时再对系统行为进行任何较大改动就十分困难. 因为行为被分布在许多对象中, 结果是不得不定义很多子类以定制系统的行为. 由此我们引入了中介者对象Mediator:  

php设计模式 Mediator (中介者模式)

复制代码 代码如下: <?php /** * 中介者模式 * * 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ abstract class Mediator { abstract public function send($message,$colleague); } abstract class Colleague { private $_mediator = null; public function Colle