欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java中的裝飾器模式是什么

本篇內(nèi)容介紹了“java中的裝飾器模式是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

十余年的臨河網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整臨河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“臨河網(wǎng)站設(shè)計”,“臨河網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

1. 基本概念

裝飾器模式(Decorator),又名包裝(Wrapper)模式。允許向一個現(xiàn)有的對象添加新的功能同時又不改變其結(jié)構(gòu)。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個包裝。
這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

2. 使用場景

2.1 HttpServletRequestWrapper

/**
 * Provides a convenient implementation of the HttpServletRequest interface that
 * can be subclassed by developers wishing to adapt the request to a Servlet.
 * This class implements the Wrapper or Decorator pattern. Methods default to
 * calling through to the wrapped request object.
 *
 * @see javax.servlet.http.HttpServletRequest
 * @since v 2.3
 */
public class HttpServletRequestWrapper extends ServletRequestWrapper implements
        HttpServletRequest {

    /**
     * Constructs a request object wrapping the given request.
     *
     * @param request The request to wrap
     *
     * @throws java.lang.IllegalArgumentException
     *             if the request is null
     */
    public HttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }
}

HttpServletRequestWrapper是一個什么都沒做的具體裝飾實現(xiàn)類(concerteDecorator),不過它即繼承了裝飾實現(xiàn)類,又實現(xiàn)了HttpservletRequst。這里什么都不做是有道理的,因為要對請求添加何種功能事先是沒法知道的,不可能盲目的添加。所以,這種里的裝飾模式的應(yīng)用場景:適合對默認目標實現(xiàn)未知或者不易擴展的情況。
裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)的擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。那么在實際應(yīng)用中遇到需增強對象的方法時,到底選用哪種方式比較好呢?這個沒有具體的定式,只能是根據(jù)具體的需求來采用具體的方式,不過有一種情況下,必須使用Decorator設(shè)計模式:即被增強的對象,開發(fā)人員只能得到它的對象,無法得到它的class文件。
比如request、response對象,開發(fā)人員之所以在servlet中能通過sun公司定義的HttpServletRequest/Response接口去操作這些對象,是因為Tomcat服務(wù)器廠商編寫了request、response接口的實現(xiàn)類。web服務(wù)器在調(diào)用servlet時,會用這些接口的實現(xiàn)類創(chuàng)建出對象,然后傳遞給servlet程序。此種情況下,由于開發(fā)人員根本不知道服務(wù)器廠商編寫的request、response接口的實現(xiàn)類是哪個?在程序中只能拿到服務(wù)器廠商提供的對象,因此就只能采用Decorator設(shè)計模式對這些對象進行增強。

當我們在使用filter的時候卻會發(fā)現(xiàn)至少有一半的時間我們都想改變HttpServletRequest對象的參數(shù)。如:用filter在HttpServletRequest對象到達Servlet之前將用戶輸入的空格去掉。但是由于java.util.Map包裝的HttpServletRequest對象的參數(shù)是不可改變的,那要怎么辦呢?幸運的是,盡管我們不能改變對象本身但是可以通過裝飾器來改變其狀態(tài)。想要改變HttpServletRequest中的參數(shù),可以通過HttpServletRequest的裝飾類HttpServletRequestWrapper來實現(xiàn),只需要在裝飾類中按照需要重寫其getParameter(getParameterValues)方法即可。

2.2 ServerWebExchangeDecorator

WebFlux中采用的裝飾器,原理類似,可以對請求和響應(yīng)參數(shù)進行修改(注意直接在過濾器中修改處于安全考慮會拋出異常UnsupportedOperationException,具體解決可以參考xbuba.com-如何在Spring WebFilter中添加自定義標頭?)。

/**
 * A convenient base class for classes that need to wrap another
 * {@link ServerWebExchange}. Pre-implements all methods by delegating to the
 * wrapped instance.
 *
 * <p><strong>Note:</strong> if the purpose for using a decorator is to override
 * properties like {@link #getPrincipal()}, consider using
 * {@link ServerWebExchange#mutate()} instead.
 *
 * @author Rossen Stoyanchev
 * @since 5.0
 *
 * @see ServerWebExchange#mutate()
 */
public class ServerWebExchangeDecorator implements ServerWebExchange {

	private final ServerWebExchange delegate;


	protected ServerWebExchangeDecorator(ServerWebExchange delegate) {
		Assert.notNull(delegate, "ServerWebExchange 'delegate' is required.");
		this.delegate = delegate;
	}
}
/**
 * Wraps another {@link ServerHttpRequest} and delegates all methods to it.
 * Sub-classes can override specific methods selectively.
 *
 * @author Rossen Stoyanchev
 * @since 5.0
 */
public class ServerHttpRequestDecorator implements ServerHttpRequest {

	private final ServerHttpRequest delegate;


	public ServerHttpRequestDecorator(ServerHttpRequest delegate) {
		Assert.notNull(delegate, "Delegate is required");
		this.delegate = delegate;
	}
}

“java中的裝飾器模式是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

網(wǎng)站標題:java中的裝飾器模式是什么
本文來源:http://chinadenli.net/article0/jggsoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、標簽優(yōu)化、網(wǎng)站收錄、建站公司品牌網(wǎng)站設(shè)計、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
久久精品国产一区久久久| 国产免费自拍黄片免费看| 欧美小黄片在线一级观看| 九九热在线视频观看最新| 国产免费一区二区三区av大片| 亚洲中文字幕高清乱码毛片| 欧美精品久久99九九| 国产成人亚洲欧美二区综| 神马午夜福利一区二区| a久久天堂国产毛片精品| 五月激情综合在线视频| 亚洲国产色婷婷久久精品| 一本色道久久综合狠狠躁| 国产av精品高清一区二区三区| 黄色片国产一区二区三区| 熟女高潮一区二区三区| 欧美丰满人妻少妇精品| 国产一区二区三区av在线| 熟女少妇久久一区二区三区| 国产精品免费无遮挡不卡视频| 国产精品色热综合在线| 国产精品熟女在线视频| 久久精品国产在热久久| 日韩黄片大全免费在线看| 日韩一级毛一欧美一级乱| 色老汉在线视频免费亚欧| 亚洲一区二区三在线播放| 欧洲日韩精品一区二区三区| 在线观看国产午夜福利| 老司机精品视频在线免费看| 年轻女房东2中文字幕| 极品少妇一区二区三区精品视频| 91人妻人澡人人爽人人精品| 午夜精品在线观看视频午夜| 午夜精品一区二区三区国产| 欧美一级不卡视频在线观看| 人人妻人人澡人人夜夜| 国产免费人成视频尤物| 欧美一区日韩二区亚洲三区| 国产在线小视频你懂的| 国产成人国产精品国产三级|