PHP設(shè)計模式之裝飾者模式代碼實例
定義:
裝飾者模式就是不修改原類代碼和繼承的情況下動態(tài)擴展類的功能。傳統(tǒng)的編程模式都是子類繼承父類實現(xiàn)方法重載,使用裝飾器模式,只需添加一個新的裝飾器對象,更加靈活,避免類數(shù)量和層次過多。
角色:
Component(被裝飾對象基類)
ConcreteComponent(具體被裝飾對象)
Decorator(裝飾者基類)
ContreteDecorator(具體的裝飾者類)
示例代碼:
//被裝飾者基類
interface Component
{
public function operation();
}
//裝飾者基類
abstract class Decorator implements Component
{
protected $component;
public function __construct(Component $component)
{
$this->component = $component;
}
public function operation()
{
$this->component->operation();
}
}
//具體裝飾者類
class ConcreteComponent implements Component
{
public function operation()
{
echo 'do operation'.PHP_EOL;
}
}
//具體裝飾類A
class ConcreteDecoratorA extends Decorator {
public function __construct(Component $component) {
parent::__construct($component);
}
public function operation() {
parent::operation();
$this->addedOperationA(); // 新增加的操作
}
public function addedOperationA() {
echo 'Add Operation A '.PHP_EOL;
}
}
//具體裝飾類B
class ConcreteDecoratorB extends Decorator {
public function __construct(Component $component) {
parent::__construct($component);
}
public function operation() {
parent::operation();
$this->addedOperationB();
}
public function addedOperationB() {
echo 'Add Operation B '.PHP_EOL;
}
}
class Client {
public static function main() {
/*
do operation
Add Operation A
*/
$decoratorA = new ConcreteDecoratorA(new ConcreteComponent());
$decoratorA->operation();
/*
do operation
Add Operation A
Add Operation B
*/
$decoratorB = new ConcreteDecoratorB($decoratorA);
$decoratorB->operation();
}
}
Client::main();
- PHP設(shè)計模式之裝飾器模式定義與用法詳解
- 學(xué)習(xí)php設(shè)計模式 php實現(xiàn)裝飾器模式(decorator)
- PHP設(shè)計模式之裝飾器模式實例詳解
- PHP設(shè)計模式之裝飾器模式定義與用法簡單示例
- PHP設(shè)計模式之裝飾者模式
- PHP設(shè)計模式之?dāng)?shù)據(jù)訪問對象模式(DAO)原理與用法實例分析
- PHP設(shè)計模式之建造者模式(Builder)原理與用法案例詳解
- PHP設(shè)計模式之適配器模式(Adapter)原理與用法詳解
- PHP設(shè)計模式之策略模式(Strategy)入門與應(yīng)用案例詳解
- PHP經(jīng)典面試題之設(shè)計模式(經(jīng)常遇到)
- php設(shè)計模式小結(jié)
- PHP設(shè)計模式之裝飾器(裝飾者)模式(Decorator)入門與應(yīng)用詳解
相關(guān)文章
PHP+Ajax檢測用戶名或郵件注冊時是否已經(jīng)存在實例教程
這篇文章主要介紹了PHP+Ajax檢測用戶名或郵件注冊時是否已經(jīng)存在實例教程,是非常常見的一個重要功能,常用于論壇注冊部分或會員注冊部分,需要的朋友可以參考下2014-08-08
PHP中文處理 中文字符串截取(mb_substr)和獲取中文字符串字?jǐn)?shù)
PHP中文處理 中文字符串截取(mb_substr)和獲取中文字符串字?jǐn)?shù),需要的朋友可以參考下。2011-11-11
php使用$_POST或$_SESSION[]向js函數(shù)傳參
php向js函數(shù)傳參的方法有多種,可以使用$_POST也可使用$_SESSION[' '],也可用echo語句進行輸出,需要的朋友可以參考下2014-09-09
PHP內(nèi)核介紹及擴展開發(fā)指南—基礎(chǔ)知識
本章簡要介紹一些Zend引擎的內(nèi)部機制,這些知識和Extensions密切相關(guān),同時也可以幫助我們寫出更加高效的PHP代碼。2011-09-09

