PHP設計模式之裝飾者模式代碼實例
更新時間:2015年05月11日 10:13:02 投稿:junjie
這篇文章主要介紹了PHP設計模式之裝飾者模式代碼實例,裝飾者模式就是不修改原類代碼和繼承的情況下動態(tài)擴展類的功能,本文就給出了代碼實例,需要的朋友可以參考下
定義:
裝飾者模式就是不修改原類代碼和繼承的情況下動態(tài)擴展類的功能。傳統(tǒng)的編程模式都是子類繼承父類實現方法重載,使用裝飾器模式,只需添加一個新的裝飾器對象,更加靈活,避免類數量和層次過多。
角色:
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中文處理 中文字符串截取(mb_substr)和獲取中文字符串字數
PHP中文處理 中文字符串截取(mb_substr)和獲取中文字符串字數,需要的朋友可以參考下。2011-11-11
php使用$_POST或$_SESSION[]向js函數傳參
php向js函數傳參的方法有多種,可以使用$_POST也可使用$_SESSION[' '],也可用echo語句進行輸出,需要的朋友可以參考下2014-09-09

