# Decorator ###### tags: `Design Patten` `Decorator` **裝飾者模式**的使用時機為,當你想要**增加類別的功能**,但不想修改到現有類別的程式碼;或是要動態地添加新功能於類別上;或是該類別搭配不同的特性會有多種組合的情況。 在Java中使用裝飾者模式的典型例子為`Java IO`,其抽像類別`InputStream`的抽象方法read()分別由不同的裝飾者類別如`BufferedInputStream`,`ObjectInputStream`,`DataInputStream`等來實作各種讀取串流(stream)的方法並提供額外的功能。而每一裝飾類別的建構式皆以其父抽像類別`InputStream`為輸入參數。 修飾模式與代理模式差異 代理模式 : 著重於對一個類`存取`,只能透過代理來間接使用,在代理模式中通常會建立一個物件實例 修飾模式 : 著重於在一個物件上`動態增加方法`,在修飾模式中會將原始物件透過修飾器的建構子傳遞