亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現web設計模式中的裝飾者模式

發布時間:2021-11-16 11:41:56 來源:億速云 閱讀:125 作者:iii 欄目:大數據

這篇文章主要講解了“怎么實現web設計模式中的裝飾者模式”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么實現web設計模式中的裝飾者模式”吧!

模式定義

裝飾者模式屬于結構型設計模式,首先我們先了解下裝飾者模式的定義。

In object-oriented programming, the decorator pattern is a design pattern that allows behavior to be added to an individual object, either statically or dynamically, without affecting the behavior of other objects from the same class. The decorator pattern is often useful for adhering to the Single Responsibility Principle, as it allows functionality to be divided between classes with unique areas of concern.

簡而言之, 裝飾者模式就是動態地為一個對象擴展額外的功能,無論是動態還是靜態,都不影響相同類的其他對象的行為, 這樣使得對象在運行時更加靈活。

裝飾者實現的方式通常為組合或者繼承,可以讓客戶端根據需求進行對應的裝飾,來達到功能增加的目標。為了簡化理解,裝飾者模式中裝飾一詞其實就是給原來的對象添加額外功能。

模式結構

接下來我們看下裝飾者模式的層次結構和主要角色.

  • Component 抽象組件,最原始,核心的對象,通常為接口或者抽象類.

  • ConcreteComponent 具體組件,對 Component 的實現,也是需要裝飾的對象.

  • Decorator 裝飾者, 通常為抽象組件的抽象實現, 它的屬性一定有私有變量指向 Component.

  • ConcreteDecorator 具體裝飾對象,是 Decorator 的具體實現, 用于將原始,核心的方法裝飾增強的類.

模式實現

現在我們用喝咖啡的例子來實現下裝飾者模式,假設我們要買一杯咖啡,需要加糖,加奶,而什么都不加的咖啡與加奶,加糖的價格都不一樣,我們就要計算調制一杯加糖加奶的咖啡需要花費多少錢。

這里咖啡就是我們的具體組件 ConcerateComponent, 奶和糖就是具體裝飾對象 ConcreteDecorator。 為了簡單,我們先創建一個Component接口類 Drink, 定義兩個方法用來獲得價格和描述:

怎么實現web設計模式中的裝飾者模式

接著,創建一個 ConcreteComponentCoffee 實現 Drink 接口.

怎么實現web設計模式中的裝飾者模式

現在就需要一個抽象類 DrinkDecorator,用于擴展實現功能增強. 怎么實現web設計模式中的裝飾者模式

然后就是實現具體裝飾對象 MilkSugar. 怎么實現web設計模式中的裝飾者模式

最后客戶端實現制作咖啡的動作: 怎么實現web設計模式中的裝飾者模式

下圖為示例的類圖:

怎么實現web設計模式中的裝飾者模式

可以從上面例子看出,通過添加不同的材料,價格不同,并且描述信息也不一樣,并且添加順序可以動態改變,甚至不添加,讓對象變得十分靈活, 這就是裝飾者模式的精髓所在。

模式使用場景

裝飾者模式同樣大量應用在 JDK 源碼中,我們經常可以看到:

  • JDK 的 IO 操作類, 比如 java.io.InputStream 體系下 FilterInputStream 的一系列實現類,比如 BufferedInputStreamLineNumberInputStreamDataInpuStream

  • java.util.Collections#synchronizedXXX()

裝飾者模式可以讓程序中對象在運行時中進行功能的增強和移除,并且采用更靈活的組合方式來進行擴展。

模式的得與失

優點:

  • 在不影響其他對象的情況下,動態為單個對象新增功能。

  • 裝飾類與被裝飾類 (ConcreteComponent) 相互獨立,互不耦合,易于擴展。

  • 代替繼承方式的功能實現,減少繼承類的存在。

缺點:

  • 裝飾層次過多時會讓被裝飾的對象更復雜,不容易理解,比如使用 Java I/O 的 DataInputStream 對象讀取數據為 Java 基本類型值時會這樣使用:

    	DataInputStream is = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));


  • 程序中若有太多的裝飾類,理解和使用上略有難度。

感謝各位的閱讀,以上就是“怎么實現web設計模式中的裝飾者模式”的內容了,經過本文的學習后,相信大家對怎么實現web設計模式中的裝飾者模式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

静宁县| 弥勒县| 瓮安县| 汽车| 湟中县| 丰顺县| 项城市| 松阳县| 澎湖县| 金寨县| 稻城县| 温州市| 英德市| 和田县| 迁西县| 平乐县| 阿坝县| 册亨县| 凉山| 天津市| 安徽省| 临清市| 文昌市| 荆门市| 临海市| 富锦市| 积石山| 明水县| 通辽市| 吉木乃县| 凤冈县| 安仁县| 德清县| 南投市| 惠州市| 定远县| 柯坪县| 永城市| 新宾| 南召县| 山丹县|