介紹Java裝飾模式

2021-09-20 12:46:33 字數 1313 閱讀 2680

裝飾模式用於給物件動態或靜態地附加額外的責任。裝飾器給原物件提供了額外功能介面。

實現該模式,我們更傾向於使用組合而不是繼承,因為可以減少每個裝飾元素子類化的開銷。遞迴呼叫該模式可以根據需要對原物件進行多次裝飾。

假設我們有乙個聖誕樹物件需要裝飾,裝飾不能改變原物件,僅給物件增加額外功能。我們打算增加一些如花環(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...