2014-09-03 22 views
1

我想教自己設計模式。我正在閱讀關於Decorator的模式,並且有一件事情我無法得到。這裏有一個例子在維基百科上找到:Example 比方說,我想實現一個既可以水平和垂直滾動窗口,我這樣做: Window win=new Window(); win=new HorizontalScrollBarDecorator(win); win=new VerticalScrollBarDecorator(win);裝飾者如何實現新的行爲?

由於winWindow類型的引用,我可以調用沒有drawHorizontalScrollBar()也不drawVerticalScrollBar()(除了具體裝飾器本身的代碼),當然,改變引用類型是沒有意義的。 那麼,我怎樣才能「添加新的行爲」(I.E.實施新的方法)與裝飾?

回答

0

沒關係,我想我明白了: 通過裝修你不能「添加新的行爲」,因爲我曾將它解釋(drawHorizontalScrollBar()是不是從HorizontalScrollBarDecorator類,這意味着它外面看到可能是通過其draw()方法調用) ,但是你可以擴展基類的方法。
這就像擴展基類,重寫draw()方法,然後調用super.draw();,區別在於您可以應用多個decorators,但不能從多個類繼承。

+0

隨時確認/添加新的細節/編輯答案,這是一種瘋狂的猜測 – 2014-09-04 09:18:54