• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP设计模式之中介者模式_php

php 搞代码 7年前 (2018-06-21) 156次浏览 已收录 0个评论

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

  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($thisarray("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($thisarray("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

欢迎大家阅读《PHP设计模式之中介者模式_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP设计模式之中介者模式_php
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址