裝飾模式
Component的角色便由鼎鼎大名的齊天大圣扮演;ConcreteComponent的角色屬于大圣的本尊,就是猢猻本人;Decorator的角色由大圣的七十二變扮演。而ConcreteDecorator的角色便是魚兒、鳥兒等七十二般變化。
image.png
裝飾模式在Java語言中的最著名的應用莫過于Java I/O標準庫的設計了。
由于Java I/O庫需要很多性能的各種組合,如果這些性能都是用繼承的方法實現的,那么每一種組合都需要一個類,這樣就會造成大量性能重復的類出現。而如果采用裝飾模式,那么類的數目就會大大減少,性能的重復也可以減至最少。因此裝飾模式是Java I/O庫的基本模式。
Java I/O庫的對象結構圖如下,由于Java I/O的對象眾多,因此只畫出InputStream的部分。
根據上圖可以看出:
● 抽象構件(Component)角色:由InputStream扮演。這是一個抽象類,為各種子類型提供統一的接口。
● 具體構件(ConcreteComponent)角色:由ByteArrayInputStream、FileInputStream、PipedInputStream、StringBufferInputStream等類扮演。它們實現了抽象構件角色所規定的接口。
● 抽象裝飾(Decorator)角色:由FilterInputStream扮演。它實現了InputStream所規定的接口。
● 具體裝飾(ConcreteDecorator)角色:由幾個類扮演,分別是BufferedInputStream、DataInputStream以及兩個不常用到的類LineNumberInputStream、PushbackInputStream。
適配器模式
橋接模式
傳統的做法:
image.png