java设计模式之装饰模式_Java中的装饰器设计模式
java設計模式之裝飾模式
裝飾器設計模式允許在運行時將附加職責或行為動態附加到對象。 它是一種結構模式,利用聚合來組合這些行為。
在本教程中,我們將學習實現裝飾器模式。
UML圖:
讓我們從裝飾器模式的UML表示開始:
ConcreteComponent類是我們希望為其在運行時添加其他行為的類。 ConcreteDecorator1 , ConcreteDecorator2 ,…是裝飾器類,它們包含裝飾給定Component的邏輯。
請注意, 抽象 Decorator類'具有' 組件。 換句話說,它聚合了任何其他類型的組件,這使我們可以將一個組件堆疊在另一個組件的頂部。
此外, ConcreteComponent和Decorator類都實現一個公共接口Component 。
示例實現:
假設我們正在銷售禮品。 一旦用戶選擇了禮物項目,就有多種方法可以用紅色或藍色絲帶,紫色或綠色禮物包裝紙等裝飾該禮物項目。
與其為每個可能的組合創建一個類,不如使用裝飾器模式來實現它。
因此,讓我們創建我們的GiftComponent接口:
public interface GiftComponent { void pack(); }此外,讓我們編寫GiftItem類,這是GiftComponent的具體實現:
public class GiftItem implements GiftComponent { ?public void pack() { System.out.println( "Putting it in a box" ); } }實現抽象裝飾器:
現在,我們有一個GiftItem,我們會喜歡裝飾,讓我們來定義抽象GiftDecorator類:
public abstract AbstractGiftDecorator implements GiftComponent { protected GiftComponent gift; ?public AbstractGiftDecorator(GiftComponent gift) { this .gift = gift; } ????public void pack() { this .gift.pack(); } }禮物裝飾器具有禮物組件的單個實例。 這使得裝飾器可以彼此堆疊。
創建多個裝飾器:
最后,我們可以根據需要創建任意數量的自定義裝飾器。
讓我們創建一些禮品包裝:
public class PurpleWrapper extends AbstractGiftDecorator { ?public PurpleWrapper(GiftComponent gift) { super (gift); } ?public void pack() { super .pack(); System.out.println( "Purple wrapper" ); } } ? public class RedWrapper extends AbstractGiftDecorator { ?public RedWrapper(GiftComponent gift) { super (gift); } ?public void pack() { super .pack(); System.out.println( "Red wrapper" ); } }以及幾種用于進一步裝飾的色帶:
public class BlueRibbon extends AbstractDecorator { ?public BlueRibbon(GiftComponent gift) { super (gift); } ?public void pack() { super .pack(); System.out.println( "Blue ribbon" ); } } ? public class PinkRibbon extends AbstractDecorator { ?public PinkRibbon(GiftComponent gift) { super (gift); } ?public void pack() { super .pack(); System.out.println( "Pink Ribbon" ); } }測試我們的實施:
現在讓我們測試一下實現,看看會發生什么:
// client code GiftComponent gift = new GiftItem(); GiftComponent giftWithPurpleWrapper = new PurpleWrapper(gift); GiftComponent giftWithPurpleWrapperAndPinkRibbon = new PinkRibbon(giftWithPurpleWrapper); ? giftWithPurpleWrapperAndPinkRibbon.pack();正如我們所看到的,我們現在可以通過鏈接裝飾器輕松,優雅地以我們想要的方式包裝禮品。 上面的代碼將打印:
Putting it in a box Purple Wrapper Pink Ribbon結論:
裝飾器設計模式使用聚合來代替純繼承。 它允許我們動態地將行為添加到對象。 它消除了為每種可能的組合創建單獨的類的開銷,從而大大減少了類的數量。
而且,它遵循單一責任原則 ,該原則規定每個班級必須準確地做一件事。 使用裝飾器設計模式設計java.io.BufferedReader,java.io.FileReader之類的類 。
翻譯自: https://www.javacodegeeks.com/2019/09/decorator-design-pattern-in-java.html
java設計模式之裝飾模式
總結
以上是生活随笔為你收集整理的java设计模式之装饰模式_Java中的装饰器设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惊讶的意思是什么 惊讶的意思简单介绍
- 下一篇: 自我审视记录本_春天重新审视战略模式