<?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類,這...