2012-07-23 174 views
4

閱讀裝飾模式時,遇到了需要澄清的事情。在裝飾器模式中,我們只是包裝一個給定的對象,並使用一連串的執行來計算。但爲什麼我們不能擁有這些對象的列表並遍歷每個對象。我的意思是沒有鏈條,我們不能只使用列表和每個對象的簡單迭代?裝飾模式vs列表

感謝

回答

6

我相信你錯過了裝飾者的觀點。

裝飾者旨在透明地添加行爲。經典的例子是Java中的InputStream。您可以像緩衝,gzip功能一樣鏈接到輸入流。但是,該裝飾輸入流的「用戶」不需要知道是否添加了額外的行爲。用戶只需使用該裝飾流作爲普通流。當然,如果你將每個「行爲」作爲一個單獨的對象,並將鏈存儲爲另一個列表,並明確地和分別地調用它們,它將起作用。然而它在裝飾者中失去了「透明度」。

2

與列表,你需要一些對象來管理列表,並遍歷和應用的對象。爲了兼容插件,管理器對象必須是所有對象(通常是抽象的)基類的子類。它的靈活性比讓每個對象都知道它包裝什麼都好,就是這樣。