這篇文章主要介紹了PHP設計模式之裝飾者模式代碼實例,裝飾者模式就是不修改原類代碼和繼承的情況下動態擴展類的功能,本文就給出了代碼實例,需要的朋友可以參考下
定義:
裝飾者模式就是不修改原類代碼和繼承的情況下動態擴展類的功能。傳統的編程模式都是子類繼承父類實現方法重載,使用裝飾器模式,只需添加一個新的裝飾器對象,更加靈活,避免類數量和層次過多。
角色:
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();
新聞熱點
疑難解答