代码如下:
UserInfo.php
//装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设计模式
class UserInfo {
public $userInfo = array();
public function addUser($userInfo) {
$this->userInfo[] = $userInfo;
}
public function getUserList() {
print_r($this->userInfo);
}
}
//UserInfoDecorate 装饰一样,改变用户信息输出为大写格式,不改变原先UserInfo类
<?php
include("UserInfo.php");
class UserInfoDecorate {
public function makeCaps($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();
到此,咱们应该是对于装饰器模式有了一个大概的了解,接下来咱们看一下构建装饰器模式的案例,网上的,先来看目录结构:
|decorator #项目根目录
|--Think #核心类库
|----Loder.php #自动加载类
|----decorator.php #装饰器接口
|----colorDecorator.php #颜色装饰器
|----sizeDecorator.php #字体大小装饰器
|----echoText.php #被装饰者
|--index.php #单一的入口文件
完事就是来构建装饰器接口,Think/decorator.php,如下:
<?php
/**
* 装饰器接口
* Interface decorator
* @package Think
*/
namespace Think;
interface decorator{
public function beforeDraw();
public function afterDraw();
}
再来就是颜色装饰器 Think/colorDecorator.php,如下:
<?php
/**
* 颜色装饰器
*/
namespace Think;
class colorDecorator implements decorator{
protected $color;
public function __construct($color) {
$this->color = $color;
}
public function beforeDraw() {
echo "color decorator :{$this->color}\n";
}
public function afterDraw() {
echo "end color decorator\n";
}
}
还有就是字体大小装饰器 Think/sizeDecorator.php,如下:
<?php
/**
* 字体大小装饰器
*/
namespace Think;
class sizeDecorator implements decorator{
protected $size;
public function __construct($size) {
$this->size = $size;
}
public function beforeDraw() {
echo "size decorator {$this->size}\n";
}
public function afterDraw() {
echo "end size decorator\n";
}
}
内容版权声明:除非注明,否则皆为本站原创文章。
