装饰器模式:
如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式。
简单点说:就是我们不应该去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展其需要修改的内容,这样做的好处就是————
1、我们可以保证类的层次不会因过多而发生混乱。
2、当我们需求的修改很小时,不用改变原有的数据结构。
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2017/8/23 * Time: 15:48 */ class User { public $nameList = []; public function returnNames() { $str = ''; foreach ($this->nameList as $name) { $str .= $name.'#'; } return $str; } } //现在需求调用returnNames返回的名字首字母大写 //1.创建装饰器类 class UserDecorator { public $user; public function __construct(User $u) { $this->user = $u; } public function returnPNames() { $str = ''; foreach ($this->user->nameList as $name) { $str .= ucfirst($name).'#'; } return $str; } } //运行代码,新增的方法没有侵入老代码,完全不影响老程序的运行,而且又扩展了旧的类 $u = new User(); $u->nameList = ['limimi','gaomimi','zhaomimi','wangmimi']; echo $u->returnNames()."\r\n"; $ud = new UserDecorator($u); echo $ud->returnPNames();
结果
D:\myapache\www\demo\guancazhe>php Decorator.php
limimi#gaomimi#zhaomimi#wangmimi#
Limimi#Gaomimi#Zhaomimi#Wangmimi#