• PHP设计模式系列


    • 什么是装饰器

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

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

    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类

    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();  


    参考:《PHP设计模式》Aaron Saray著
  • 相关阅读:
    JS 缓存
    时区转换
    JQuery easy UI 通过updateRow 排序
    SqlServer2008 数据库同步的两种方式
    C#各种辅助类收集(CSharpCommonHelper)
    Doc命令收集(一)
    Sql Server Alter语句
    JQuery easy UI updateRow
    Doc命令收集(二)
    六大开源搜索引擎工具
  • 原文地址:https://www.cnblogs.com/wanghaitao/p/9440352.html
Copyright © 2020-2023  润新知