裝飾器(decorator)模式,是一種在執行期動態給某個物件的例項增加功能的方法。
1.圖示:
首先,仍然需要定義頂層介面textnode:
public inte***ce textnode
核心節點,例如
,它需要從textnode直接繼承:
public class spannode implements textnode
public string gettext()
}
抽象的decorator類:
public abstract class nodedecorator implements textnode
public void settext(string text)
}
這個nodedecorator類的核心是持有乙個textnode,即將要把功能附加到的textnode例項。接下來就可以寫乙個加粗功能:
public class bolddecorator extends nodedecorator
public string gettext()
}
類似的,可以繼續加italicdecorator、underlinedecorator等。客戶端可以自由組合這些decorator;
呼叫:
textnode n1 = new spannode();
textnode n2 = new bolddecorator(new underlinedecorator(new spannode()));
textnode n3 = new italicdecorator(new bolddecorator(new spannode()));
n1.settext("hello");
n2.settext("decorated");
n3.settext("world");
system.out.println(n1.gettext());
//輸出hello
system.out.println(n2.gettext());
//輸出decorated
system.out.println(n3.gettext());
//輸出world
3.應用
io中
23種設計模式之裝飾模式(Decorator)
裝飾模式是一種物件結構型模式,可動態地給乙個物件增加一些額外的職責,就增加物件功能來說,裝飾模式比生成子類實現更為靈活。通過裝飾模式,可以在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責 當需要動態地給乙個物件增加功能,這些功能可以再動態地被撤銷時可使用裝飾模式 當不能採用生成子類的方...
設計模式學習之裝飾者模式(Decorator)
作用 假設我們有乙個使用了八個物件的程式,由於需求變更,其中三個物件需要另外乙個屬性。讀者可以為這三個物件建立乙個派生類,在多數情況下,這是乙個完全可以接受的方案。然而,如果這三個物件中的每個物件都要求有不同的屬性,這就意味著要建立三個派生類。更進一步,如果其中乙個類具有其他兩個類中的屬性,可能就要...
設計模式 裝飾器模式
裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...