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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

装饰信封

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 装饰信封 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有時 很多時候,我需要一個類實現通過使其他類的實例的接口。 聽起來很奇怪? 讓我給你看一個例子。 在Takes框架中有很多此類,它們的名稱都都類似于*Wrap 。 這是一個方便的設計概念,不幸的是,在Java中看起來相當冗長。 擁有更短的內容會很棒,例如在EO中。

西北西北(1959年),阿爾弗雷德·希區柯克(Alfred Hitchcock)

看一下Takes Framework中的RsHtml 。 它的設計看起來像這樣(只有一個主要構造函數的簡化版本):

class RsHtml extends RsWrap {RsHtml(final String text) {super(new RsWithType(new RsWithStatus(text, 200),"text/html"));} }

現在,讓我們看一下它擴展的RsWrap :

public class RsWrap implements Response {private final Response origin;public RsWrap(final Response res) {this.origin = res;}@Overridepublic final Iterable<String> head() {return this.origin.head();}@Overridepublic final InputStream body() {return this.origin.body();} }

如您所見,此“裝飾器”除“僅裝飾”外不執行任何操作。 它封裝了另一個Response ,并通過所有方法調用。

如果還不清楚,我將解釋RsHtml的用途。 假設您有文字,并且想創建一個Response :

String text = // you have it already Response response = new RsWithType(new RsWithStatus(text, HttpURLConnection.HTTP_OK),"text/html" );

您可以使用RsHtml在許多地方一遍又一遍地執行這種裝飾器的組合 :

String text = // you have it already Response response = new RsHtml(text);

這非常方便,但是RsWrap非常冗長。 太多的行沒有做任何特別的事情; 他們只是將所有方法調用轉發到封裝的Response 。

我們如何引入一個新概念“ decorators”,并使用一個新關鍵字decorates :

class RsHtml decorates Response {RsHtml(final String text) {this(new RsWithType(new RsWithStatus(text, 200),"text/html"))} }

然后,為了創建一個對象,我們只需調用:

Response response = new RsHtml(text);

裝飾器中沒有任何新方法,只有構造器。 這些家伙的唯一目的是創建其他對象并封裝它們。 它們并不是真正的通用對象。 它們僅幫助我們創建其他對象。

這就是為什么我稱它們為“裝飾信封”。

這個想法可能看起來與Factory設計模式非常相似,但是它沒有靜態方法 ,我們試圖在面向對象的編程中避免這種方法 。

您可能還會發現這些相關的帖子很有趣: 可組合裝飾器與命令式實用方法 ; 通過驗證裝飾器進行防御性編程 ; If-Then-Else是代碼氣味 ; 垂直和水平裝飾 ; 為什么InputStream設計錯誤 ;

翻譯自: https://www.javacodegeeks.com/2017/02/decorating-envelopes.html

總結

以上是生活随笔為你收集整理的装饰信封的全部內容,希望文章能夠幫你解決所遇到的問題。

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