什麼是裝飾器
裝飾器模式,對已有對象的部分內容或者功能進行調整,但是不需要修改原始對象結構,可以使用裝飾器設
應用場景
設計一個UserInfo類,裡面有UserInfo數組,用於存儲用戶名信息
通過addUser來添加用戶名
getUserList方法將打印出用戶名信息
現在需要將添加的用戶信息變成大寫的,我們需要不改變原先的類,並且不改變原先的數據結構
我們設計了一個UserInfoDecorate類來完成這個需求的操作,就像裝飾一樣,給原先的數據進行了裝修
裝飾器模式有些像適配器模式,但是一定要注意,裝飾器主要是不改變現有對象數據結構的前提
代碼:UserInfo
[php]
<?php
//裝飾器模式,對已有對象的部分內容或者功能進行調整,但是不需要修改原始對象結構,可以使用裝飾器設計模式
class UserInfo {
public $userInfo = array();
public function addUser($userInfo) {
$this->userInfo[] = $userInfo;
}
public function getUserList() {
print_r($this->userInfo);
}
}
代碼:UserInfoDecorate 裝飾一樣,改變用戶信息輸出為大寫格式,不改變原先UserInfo類
[php]
<?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();
作者:initphp