裝飾器模式
是靈活給原有類裝飾新功能。
動態的給物件新增額外職責,就增加功能來說,裝飾模式比生成子類更為靈活。如果你需要新增一些額外的功能,再不修改原有類的基礎上,給原有類套個殼。並且可以套多個殼,我覺得裝飾器模式有點像中介軟體。
比如你現在有乙個登入的功能。
可以使用裝飾器模式。
/**
* 裝飾器模式
* 裝飾器父類
*/class
decorate
function
login()
}/**
* 裝飾器模式
* 許可權裝飾器
*/class
loginauth
extends
decorate
}/**
* 裝飾器模式
* 登入日誌裝飾器
*/class
loginlog
extends
decorate
}/**
* 裝飾器模式
*/class
loginwechat
extends
decorate
}
下面是原來的登入功能
/**
* 裝飾器模式
* 核心**
* 登入功能
*/class
login
}
原來的客戶端直接呼叫login,只有登入功能。
$login
=new
login()
;$login
->
login()
;
增加了裝飾器以後可以把登入功能放入裝飾器。
$login
=new
login
;//使用許可權裝飾器
$login
=new
loginauth
($login);
//使用登入日誌裝飾器
//使用登入日誌裝飾器
$login
=new
loginlog
($login);
//使用許可權裝飾器
這個模式就非常靈活,可以任意組裝自己的裝飾,比如購買支付的時候,需要裝飾積分發放,賬單通知這些。而且每個裝飾器的職責單一,方便插拔,如果不需要乙個裝飾器的時候把這個裝飾器去掉就可以了。
**放在了我的github上面。
設計模式之裝飾器模式
定義 decorator裝飾器,顧名思義,就是動態地給乙個物件新增一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特徵 它必須具有乙個裝飾的物件。它必須擁有與被裝飾物件相同的介面。它可以給被裝飾物件新增額外的功能。用一句話總結就是 保持介面,增強效能。裝飾器通過包裝乙個裝飾物件來...
設計模式之裝飾器模式
什麼是裝飾器模式 decorator 裝飾器模式的優點 裝飾器模式的缺點 示例 package com.pattern.decorator 抽象類,裝飾器的父類 author yjzhou public abstract class decorator implements component ov...
設計模式之裝飾器模式
裝飾模式 decorator 顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,關係圖如下 source類是被裝飾類,decorator類是乙個裝飾類,可以為source類動態的新增一些功能,如下 1.public ...