html5中文学习网

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

PHP设计模式之装饰器模式_PHP教程_编程技术

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

装饰器设计模式适用于下列工作场合: 需求变化是快速和细小的,而且几乎不影响应用程序的其他部分。()
使用装饰器设计模式设计类的目标是: 不必重写任何已有的功能性代码,而是对某个基于对象应用增量变化。
装饰器设计模式采用这样的构建方式: 在主代码流中应该能够直接插入一个或多个更改或“装饰”目标对象的装饰器,同时不影响其他代码流。Y43HTML5中文学习网 - HTML5先行者学习网

  1. <?php   
  2.     class CD {   
  3.         public $trackList;   
  4.            
  5.         public function __construct() {   
  6.             $this->trackList = array();   
  7.         }   
  8.            
  9.         public function addTrack($track) {   
  10.             $this->trackList[] = $track;   
  11.         }   
  12.            
  13.         public function getTrackList() {   
  14.             $output = '';   
  15.                
  16.             foreach ($this->trackList as $num => $track) {   
  17.                 $output .= ($num + 1) . ") {$track}.";   
  18.             }   
  19.                
  20.             return $output;   
  21.         }   
  22.     }   
  23.        
  24.     $tracksFroExternalSource = array("What It Means""Brr""Goodbye");   
  25.        
  26.     $myCD = new CD();   
  27.     foreach ($tracksFroExternalSource as $track) {   
  28.         $myCD->addTrack($track);   
  29.     }   
  30.        
  31.     print "The CD contains:{$myCD->getTrackList()}/n";   
  32.        
  33.     /**  
  34.      * 需求发生小变化: 要求每个输出的参数都采用大写形式. 对于这么小的变化而言, 最佳的做法并非修改基类或创建父 - 子关系,   
  35.                        而是创建一个基于装饰器设计模式的对象。   
  36.      *  
  37.      */   
  38.     class CDTrackListDecoratorCaps {   
  39.         private $_cd;   
  40.            
  41.         public function __construct(CD $cd) {   
  42.             $this->_cd = $cd;   
  43.         }   
  44.            
  45.         public function makeCaps() {   
  46.             foreach ($this->_cd->trackList as & $track) {   
  47.                 $track = strtoupper($track);   
  48.             }   
  49.         }   
  50.     }   
  51.        
  52.     $myCD = new CD();   
  53.     foreach ($tracksFroExternalSource as $track) {   
  54.         $myCD->addTrack($track);   
  55.     }   
  56.        
  57.     //新增以下代码实现输出参数采用大写形式   
  58.     $myCDCaps = new CDTrackListDecoratorCaps($myCD);   
  59.     $myCDCaps->makeCaps();   
  60.        
  61.     print "The CD contains:{$myCD->getTrackList()}/n";   
  62. ?> 

 数据库脚本请参照:http://www.cxybl.com/html/wlbc/Php/2011_1126_9458.htmlY43HTML5中文学习网 - HTML5先行者学习网

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