裝飾模式用於給物件動態或靜態地附加額外的責任。裝飾器給原物件提供了額外功能介面。
實現該模式,我們更傾向於使用組合而不是繼承,因為可以減少每個裝飾元素子類化的開銷。遞迴呼叫該模式可以根據需要對原物件進行多次裝飾。
假設我們有乙個聖誕樹物件需要裝飾,裝飾不能改變原物件,僅給物件增加額外功能。我們打算增加一些如花環(garland)、金屬絲(tinsel)、樹頂(treetop)、泡泡燈(bubble light)等:
public inte***ce christmastree
介面實現如下:
public class christmastreeimpl implements christmastree
}
現在給原物件建立抽象類treedecorator ,也實現christmastree介面幷包含原物件。其實現方法簡單呼叫decorate()方法:
public abstract class treedecorator implements christmastree
@override
public string decorate()
}
我們現在建立裝飾元素。它們都繼承抽象treedecorator類並根據需求修改decorate()方法:
public class bubblelights extends treedecorator
public string decorate()
private string decoratewithbubblelights()
}
其他的裝飾元素一樣:
public class garland extends treedecorator
public string decorate()
private string decoratewithgarland()
}
下面測試結果為true:
@test
public void whendecoratorsinjectedatruntime_thenconfigsuccess()
對第乙個tree1物件,我們僅適用garland進行裝飾。而第二個tree2物件裝飾乙個bubblelights 和兩個garlands。該模式讓我們可以靈活地在執行時根據需要增加裝飾元素。 Java 裝飾模式
動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。盜圖 component是定義了乙個物件介面,可以誒這些uixiang動態新增職責。concretecomponent是定義了乙個具體物件,也可以給這個物件新增一些職責,decorator,裝飾抽象類,繼承了compon...
java 裝飾模式
裝飾模式 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活 適用性 1.在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責。2.處理那些可以撤消 再不用使用的類或方法 的職責。3.當不能採用生成子類的方法進行擴充時。參與者 1.compone...
裝飾者模式介紹
裝飾者模式 動態的將新功能附加到物件上。在物件功能擴充套件方面,它比繼承更 有彈性。裝飾者模式就像打包乙個快遞。主體 component 比如 陶瓷 食物 包裝 decorator 比如 報紙 泡沫 1 建立快遞主體抽象類和具體快遞類 public abstract class delivery p...