装饰器
装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设
应用场景
- 设计一个UserInfo类,里面有UserInfo数组,用于存储用户名信息
 
- 通过addUser来添加用户名
 
- getUserList方法将打印出用户名信息
 
- 现在需要将添加的用户信息变成大写的,我们需要不改变原先的类,并且不改变原先的数据结构
 
- 我们设计了一个UserInfoDecorate类来完成这个需求的操作,就像装饰一样,给原先的数据进行了装修
 
- 装饰器模式有些像适配器模式,但是一定要注意,装饰器主要是不改变现有对象数据结构的前提
 
代码设计
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  | 
<?php
 
class UserInfo
{
 
    public $userInfo = array();
 
    public function addUser($userInfo)
    {
        $this->userInfo[] = $userInfo;
    }
 
    public function getUserList()
    {
        echo var_export($this->userInfo, true);
    }
 
}
 
class UserInfoDecorate
{
    public function makeCaps(UserInfo $userInfo)
    {
        foreach ($userInfo->userInfo as &$val) {
            $val = strtoupper($val);
        }
    }
 
}
 
$UserInfo = new UserInfo;
$UserInfo->addUser('zhu');
$UserInfo->addUser('initphp');
$UserInfoDecorate = new UserInfoDecorate;
$UserInfoDecorate->makeCaps($UserInfo);
$UserInfo->getUserList();
  |