html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

PHP设计模式之中介者模式_PHP教程_编程技术

[ ] 已经帮助:人解决问题

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

  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.htmlE5mHTML5中文学习网 - HTML5先行者学习网

E5mHTML5中文学习网 - HTML5先行者学习网
E5mHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助