1. 程式人生 > >圖解設計模式讀書筆記(九)——Decorator(裝飾)模式

圖解設計模式讀書筆記(九)——Decorator(裝飾)模式

應用場景:

最主要的應用場景就是當要增加一些基本功能的排列組合而產生的非常大量的功能時。

舉幾個例子:

1.文中的裝飾顯示的例子,有多種裝飾方式,比如在字串兩邊加 “|”,或者上下加一行“+------+”這種符號,文中只提到對單行的String的裝飾,還可能會有其他型別的裝飾,如Int,boolean等。如果不使用裝飾著模式,則需要對StringDisplay類不斷的繼承擴充套件,特別是在需要混合某些裝飾的時候。

2.https://www.jianshu.com/p/e309cb7f86a2,這裡有一篇拿王者榮耀來舉例子的文章,非常有意思,也講的很明白,大概就是一個英雄在有buffer的時候,其屬性的變化。比如紅buffer的李白,藍buffer的李白,或著紅藍buffer 的李白,還有其他的英雄,如果不使用裝飾模式,那麼會產生很多種(各種buffer的全排列)的李白,也有很多種的其他英雄。

類結構圖:

Component可以是介面,也可以是抽象類,對應例1中的Display(顯示),對應例2中的英雄;

ConcreteComponent是具體的元件類,對應例1中的具體顯示類StringDisplay,對應例2中的具體英雄李白等;

Decorator是抽象的裝飾類,它跟ConcreteComponent具有一致性,對應例1中的Border(邊框),對應例2中的buffer這種抽象;

ConcreteDecorator是具體的功能類,對應例1中的各種邊框,例2中的各種buffer。

另:

java中的輸入輸出流就是很典型的Decorator模式,各種reader和writer可以互相裝飾,他們都有一致性,都能用Reader和Writer類表示。