在實現了裝飾器模式並編寫了一對裝飾器之後,我注意到API允許用戶堆疊不兼容的裝飾器。這是API設計者應該忍受的模式的一個自然約束,還是我自己部分的錯誤實現?裝飾裝飾器
例如,假設有一個類可以使用以二進制編碼數據的二進制裝飾器或使用字符串編碼數據的字符串裝飾器進行裝飾。鑑於使用了字符串裝飾器,它可能會進一步用JSON或XML裝飾器進行裝飾。現在很明顯,在應用了JSON裝飾器之後,它將不兼容於在其上使用XML裝飾器,或者如果使用了二進制裝飾器,則XML/JSON裝飾器是沒有用的。使用java.io包
Java示例:
InputStream is = someInputStream;
BufferedInputStream bis = new BufferedInputStream(is);
ObjectInputStream ois = new ObjectInputStream(bis);
DataInputStream dis = new DataInputStream(ois);
這樣做的結果是不確定的,但API允許它。
爲什麼不能以可用的任何格式對類進行編碼,具體取決於傳遞給編碼方法的參數還是單獨的方法調用本身?爲什麼用JSON裝飾器裝飾類使其與XML裝飾器不兼容? – Eimantas 2011-05-27 08:07:23
好點。它可以,但在我的情況下,這將是一個編程開銷。 – yannisf 2011-05-27 08:08:27