設計模式學習筆記 裝飾器模式

2021-09-10 06:39:17 字數 1010 閱讀 6729

比如人的行為類,剛剛開始的時候,就能上得了廳堂,下得了廚房。但隨著年歲的增長,每個人歷經了世事,變得不僅是上得了廳堂,下得了廚房。有些人能鬥得過流氓,有些人修得了電腦。

那麼如果用**表示這些增加了特殊行為的人。

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類實現了...