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

PHP设计模式之装饰器模式_php

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

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

  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.html

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


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

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

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

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