裝飾模式(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.具體裝飾 具體擴充套件的功能在這裡 三 例子 使用裝飾模式來演示乙...