Java 裝飾模式 4 4

2021-09-08 19:59:45 字數 2051 閱讀 1506

裝飾模式(decorator pattern)

依照num模型。討論職業/iprofession類層次。

iprofession定義了方法say(string),事實上現類教師/ teacher、醫生、律師……依照其職業習慣給出say(string)的實現,這些實現類相當於num模型中的zero。

而才藝/talent類層次(相當於nextone),能夠裝飾基本物件,say(string)實現中,在必要的時候會說english、在必要的時候會唱幾句……

}// tenglish略

抽象裝飾型別talent,只定義了其類層次的結構——作為型別閉包。沒有提供say(string s)的預設實現,由於提供例如以下預設實現

@override public final void say(string s)

@override public final void say(string s)

public abstract string strengthen(string s);

}package closure.decorator;

public class tenglish extends talent

public string english(string s)

@override public string strengthen(string s)

}//test

iprofession p = (iprofession) god.create("profession-decorator");//

p.say("類層次");

p = new tenglish(new tsong(new tenglish(p)));

p.say("lsp");

p = new tsong(p);

p.say("繼承");

p= p.removesong();

p.say("繼承");

測試**的輸出為:

解說[類層次]

解說[e文(旋律(e文(lsp)))]

解說[e文(旋律(e文(旋律(繼承))))]

裝飾模式比較典型的標誌:person b = new t2(newt2(newt1(newlawyer())));

裝飾模式與橋接模式非常相似。橋接模式將2次以上的策略選擇逐一地串接起來。如例程3-5中定義的模板方法。

public default void lecture(string s) {

string mystyle = say(s);

next.say(mystyle);

橋接模式所串接的,是兩種不同的類層次。而裝飾模式則將talent和它的父型別iprofession進行逐一的串接。

能夠說,裝飾模式是橋接模式的特例。

Java 裝飾模式

動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。盜圖 component是定義了乙個物件介面,可以誒這些uixiang動態新增職責。concretecomponent是定義了乙個具體物件,也可以給這個物件新增一些職責,decorator,裝飾抽象類,繼承了compon...

java 裝飾模式

裝飾模式 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活 適用性 1.在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責。2.處理那些可以撤消 再不用使用的類或方法 的職責。3.當不能採用生成子類的方法進行擴充時。參與者 1.compone...

java與模式 裝飾模式

第四個設計模式 裝飾模式 裝飾模式是對物件功能增強時,平時使用繼承的一種替代方案 一 uml示意圖 二 組成部分 1.抽象構件 原始的功能介面 2.具體構件 具體的原始功能類 3.裝飾角色 持有具體構件類的物件,以便執行原有功能 4.具體裝飾 具體擴充套件的功能在這裡 三 例子 使用裝飾模式來演示乙...