設計模式 裝飾器(Decorator)模式

2021-10-07 20:42:19 字數 1226 閱讀 6348

裝飾器(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...