比如人的行為類,剛剛開始的時候,就能上得了廳堂,下得了廚房。但隨著年歲的增長,每個人歷經了世事,變得不僅是上得了廳堂,下得了廚房。有些人能鬥得過流氓,有些人修得了電腦。
那麼如果用**表示這些增加了特殊行為的人。
inte***ce iperson
class person implements iperson
}
如果有人增加了它的行為,我們有幾種方式去解決。一是通過繼承iperson 重新實現乙個新的具體類。二是對原有的persion例項新增新行為。第一種方式屬於繼承(即要實現新行為,也要將原有的行為實現),第二種方式是組合(新增新行為)。
//雖然歲月的流逝,人越來越成熟穩重,能力也越來越強,原來的person 再無法描述他的行為
class persondecorate implements iperson
public function action()
public function newaction()
}
//開始時,懵懂的人
$person = new person();
$person->action();
echo "
------------------------
";//成熟的人
$person2 = new persondecorate($person);
$person2->action(); // 新增了行為
上面的實現就是今天的主角--裝飾器模式
裝飾器模式:包裝乙個物件,提供新的行為(意在為乙個已有的類提供乙個新行為)。
1.比靜態繼承更靈活 與物件的靜態繼承(多重繼承)相比,decorator 模式提供了更加靈活的向物件新增職責的方式。可以用新增和分離的方法,用裝飾在執行時刻增加和刪除職責。
2.相比之下,繼承機制要求為每個新增的職責建立乙個新的子類,這會產生許多新的類,並且會增加系統的複雜度。
《設計模式》學習筆記 裝飾模式
裝飾模式 decorator pattern 指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能.它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。pragma once include includeclass car class runcar public car pr...
設計模式學習之裝飾器模式
裝飾器模式,動態地給乙個物件新增一些額外地職責,就增加功能方面來說,裝飾器模式比生成子類更為靈活。裝飾器模式是為已有功能動態地新增更多功能地一種方式。但是我們什麼時候可以使用裝飾器模式呢?當系統需要新功能的時候,是向舊的類中新增新的 這些新加的 通常裝飾了原有類的核心職責或主要行為。這種做法的問題在...
設計模式學習筆記之裝飾模式
裝飾模式 包裝器 動態地給物件新增一些額外的職責。即動態擴充套件乙個物件的功能,而不需要改變原始類 具體元件 類和 具體裝飾 類是該模式最重要的兩個角色 抽象元件 author zhenyonghe eg.假設系統中有乙個bird抽象類以及bird類的乙個子類 sparrow。sparrow類實現了...