日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java设计模式之装饰模式_Java中的装饰器设计模式

發布時間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的装饰器设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。