PHP设计模式系列 - 装饰器

  • 什么是装饰器

装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设

  • 应用场景
  1. 设计一个UserInfo类,里面有UserInfo数组,用于存储用户名信息
  2. 通过addUser来添加用户名
  3. getUserList方法将打印出用户名信息
  4. 现在需要将添加的用户信息变成大写的,我们需要不改变原先的类,并且不改变原先的数据结构
  5. 我们设计了一个UserInfoDecorate类来完成这个需求的操作,就像装饰一样,给原先的数据进行了装修
  6. 装饰器模式有些像适配器模式,但是一定要注意,装饰器主要是不改变现有对象数据结构的前提
  • 代码:UserInfo

[php] 
view plain
 copy
 print
?

  1. <?php  
  2. //装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设计模式  
  3. class UserInfo {  
  4.   
  5.     public $userInfo = array();   
  6.           
  7.     public function addUser($userInfo) {  
  8.         $this->userInfo[] = $userInfo;  
  9.     }  
  10.           
  11.     public function getUserList() {  
  12.         print_r($this->userInfo);  
  13.     }  
  14. }  

  • 代码:UserInfoDecorate 装饰一样,改变用户信息输出为大写格式,不改变原先UserInfo类

[php] 
view plain
 copy
 print
?

  1. <?php  
  2. include(“UserInfo.php”);  
  3. class UserInfoDecorate {  
  4.       
  5.     public function makeCaps($UserInfo) {  
  6.         foreach ($UserInfo->userInfo as &$val) {  
  7.             $val = strtoupper($val);  
  8.         }  
  9.     }  
  10.       
  11. }  
  12.   
  13. $UserInfo = new UserInfo;  
  14. $UserInfo->addUser(‘zhu’);  
  15. $UserInfo->addUser(‘initphp’);  
  16. $UserInfoDecorate = new UserInfoDecorate;  
  17. $UserInfoDecorate->makeCaps($UserInfo);  
  18. $UserInfo->getUserList();  
    原文作者:Able张
    原文地址: https://blog.csdn.net/zhwxl_zyx/article/details/52399925
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞