設計模式PHP版六 裝飾器模式

2021-09-23 17:10:45 字數 2005 閱讀 3934

<?php

/** * 定義乙個介面

* inte***ce component

*/inte***ce component

/** * class decorator 裝飾器

*/abstract class decorator implements component

public function operation()

}/**

* class suit 西裝裝飾類

*/class suit extends decorator

public function operation()

public function suit()

}/**

* class hat 帽子裝飾類

*/class hat extends decorator

public function operation()

public function hat()

}/**

* class swimsuit 泳衣裝飾類

*/class swimsuit extends decorator

public function operation()

public function swimsuit()

}/**

* class concretecomponent 具體元件類,要裝飾的類

*/class concretecomponent implements component

}$component = new concretecomponent();

$component->operation();

echo '

---------------------

';/**

* suit繼承了decorator,當把$component傳入時進入構造方法,走了parent::__construct,就是執行了父類的構造方法。

* 此時,decorator類裡的$clothing就儲存了$component物件。

*/$suit = new suit($component);

// 呼叫時是先執行了parent::operation(),也就是decorator類裡$component物件,再呼叫類自身的方法

$suit->operation(); // 輸出 **的人 穿西裝

echo '

---------------------

';/**

* 同上,只不過decorator類裡的$clothing變成了suit($component)

*/$hat = new hat($suit);

// 呼叫時先是執行了parent::operation(),也就是suit($component)->operation(),和上面的$suit->operation()效果是一樣的

$hat->operation(); // 輸出 **的人 穿西裝 戴帽子

echo '

---------------------

';$hattwo = new hat($component);

$hattwo->operation();

echo '

---------------------

';$swimsuit = new swimsuit($component);

$swimsuit->operation();

/** * 其實就是實現了動態的對所要操作的乙個很重要的類增加操作。假設如果是乙個很複雜的類,你又不能輕易去改的情況下,在某個部分要給它增加後續的操作。

* 你也許會想,那這樣我直接繼承然後呼叫不就完事了?幹嘛整這麼複雜?可你增加多個操作時,得一層一層的繼承啊,當a繼承b,b繼承c,c繼承d,輸出abcd,現在的需求是ad,中間就多了倆個類,如果更多的操作呢?

* 而現在你只需將所有的裝飾類繼承裝飾器類,將最高層的基類傳入裝飾類,就實現了"繼承"的效果,而且是動態的。要用什麼就裝飾什麼。

*/

PHP設計模式 裝飾器模式

web開發筆記 www.chhua.com 每日練習 php設計模式 裝飾器模式 裝飾器模式與介面卡模式的作用幾乎是一樣的,要深刻的理解裝飾模式,就一定要記住 裝飾 二字,很明顯,就是在之前類的基礎上進行一下修飾。也就是說,裝飾器模式必須有父類,然後子類對父類進行裝飾。下面用乙個例項來說明一下裝飾器...

PHP 設計模式 裝飾器模式

裝飾器類的作用 不使用繼承,也能是物件使用新方法。重點是類例項化出來的物件。裝飾器類 配菜類 也必須繼承food類,否則就不是裝飾器類了 嗯!就是這樣 裝飾器 手抓餅實現。1 food抽象類 cake類 2 food抽象類 peicai抽象類 各種配菜類 有新方法 3 例項化cake類 obj 將 ...

php設計模式之裝飾器模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比 繼承更有彈性的替代方案。有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比如milk,sugarandmilk類,這...