php有没有装饰器,PHP 装饰器模式

本文介绍了装饰器模式的应用,它允许在不修改原有对象的情况下,通过创建装饰器类来扩展对象的功能。示例中展示了如何通过装饰器使用户类返回的名字首字母变为大写,这种方式避免了对原始代码的入侵,保持了类结构的清晰,并在需求变更时提供了灵活性。
摘要由CSDN通过智能技术生成

装饰器模式: 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式。 简单点说:就是我们不应该去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展其需要修改的内容,这样做的好处就是———— 1、我们可以保证类的层次不会因过多而发生混乱。 2、当我们需求的修改很小时,不用改变原有的数据结构。

/**

* 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#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值