1. 程式人生 > >java設計模式之裝飾模式代理模式區別

java設計模式之裝飾模式代理模式區別

初次看裝飾模式的時候首先想到了上節講的代理模式,代理模式與裝飾者模式看起來很像,都實現基礎物件實現的介面,在其自身物件中都儲存著對被代理/被裝飾者的物件引用。
各用一句話描述兩個模式應該是這樣的:
裝飾模式:以對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案, Java IO的設計即是裝飾者模式。
代理模式:給一個物件提供一個代理物件,並有代理物件來控制對原有物件的引用,spring的動態代理即使用的代理模式。

從描述中可以看出來兩者的區別:裝飾模式應該為所裝飾的物件增強功能;代理模式對代理的物件施加控制,並不提供物件本身的增強功能。 舉個例子:
1.裝飾模式:對被裝飾的物件增加額外的職責,滿足里氏代換原則(子類可以代替父類)

如:杯子生產線,杯子必須可以裝水,在生產線上可以給杯子塗顏色,加杯蓋,但要保證杯子可以裝水。

2.代理模式:對被代理的物件提供訪問控制。
如:客戶訂購商品,可以直接從廠家訂購,也可以從網上商城訂購,網上商城是廠家的代理,從網上商城訂購商品,商城可以對商品進行控制,不交錢不給商品,人不在不給商品,也可以贈送你額外的禮品,代金券。
還看到一篇帖子從以下兩方面進行的分析,也拿來參考一下:
從功能效果上看

  裝飾模式:在不改變介面的前提下,動態擴充套件物件的功能

  代理模式:在不改變介面的前提下,控制物件的訪問

  裝飾模式強調功能擴充套件,比如A物件的B方法,運用裝飾模式後,在呼叫B方法前後,實現新的功能,此時B方法效果與原來不同

  代理模式強調控制訪問,如上例,運用代理模式後,在呼叫B方法前後,控制怎麼訪問B方法的原始資料,而對於B實現的功能效果不做修改

  因此,如果運用設計模式後,方法的功能效果(主要是輸出效果)不變,一般可視為代理。

從類結構上看

  通過裝飾模式結構圖中可以看出

  431x356

  Component類在Decorator模式中充當抽象介面的角色,不應該去實現具體的行為。而且Decorator類對於Component類應該透明,換言之Component類無需知道Decorator類,Decorator類是從外部來擴充套件Component類的功能。

  Decorator類在介面上表現為is-a Component的繼承關係,即Decorator類繼承了Component類所具有的介面。但在實現上又表現為has-a Component的組合關係

  Decorator模式在實際中的運用可以很靈活。如果只有一個ConcreteComponent類而沒有抽象的Component類,那麼Decorator類可以是ConcreteComponent的一個子類。

  同樣,通過代理模式結構圖中可以得出

  405x252

  代理類和被代理物件是has-a關係,一般沒有is-a關係,除非代理類直接繼承被代理類,重寫被代理類的方法,即上圖中沒有抽象Subject類時的情況。

相關推薦

設計思想與模式四靜態代理模式

test 創建 靜態代理 pan 代理 對象的訪問 override todo 父類 一 概述 1.什麽是代理模式? 為了隱藏與保護目標對象,為其他對象提供一個代理以控制對該目標對象的訪問。 2.什麽是靜態代理模式? 代理模式有兩種: 靜態代理:代理對象固定。 動態代理:

C#設計模式十二代理模式(Proxy Pattern)【結構型】

ride col 安全 .html 使用權 防火墻 一對多 tro 橋接 原文:C#設計模式之十二代理模式(Proxy Pattern)【結構型】一、引言 今天我們要講【結構型】設計模式的第七個模式,也是“結構型”設計模式中的最後一個模式,該模式是【代理模式】,英文名稱

設計模式結構型--代理模式

類和對象 mic div att 機票 name void out pro 代理模式(Proxy pattern)核心作用: 通過代理,控制對對象的訪問 可以詳細控制訪問某個(某類)對象的方法,在調用這個方法前做前置處理,調用這個方法後 做後置處理(即:AOP的微觀實現)

java設計模式裝飾模式代理模式區別

初次看裝飾模式的時候首先想到了上節講的代理模式,代理模式與裝飾者模式看起來很像,都實現基礎物件實現的介面,在其自身物件中都儲存著對被代理/被裝飾者的物件引用。 各用一句話描述兩個模式應該是這樣的: 裝飾模式:以對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案

java設計模式 裝飾模式

rac 都在 通過 div 過濾 一個人 創建 展開 out 裝飾器模式 裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。 這種類型的設計模式屬於結構型模式,它是作為現有的類的一個包裝。 這種模式創建了一個裝飾類,用來包

java設計模式 裝飾模式

食物 implement super map 結束 同時 ring 接口 包裝 適AT java設計模式之 裝飾器模式 裝飾器模式 裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。 這種類型的設計模式

Java設計模式(9)——創建型模式裝飾模式

block 擴展 str 分享 增加 image tro col 技術 一、概述   動態地給一個對象添加一些額外的職責。就增加功能來說, Decorator模式相比生成子類更為靈活。該模式以對客 戶端透明的方式擴展對象的功能。   UML簡圖      角

java設計模式裝飾模式

zha tput str itl fill ext 裏的 pri use 轉載請註明出處:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 其實我們可以這樣理解裝飾器模式, 就拿自己舉例子

java的23種設計模式裝飾模式

這裡給大家推薦一篇文章裡面介紹了23種設計模式https://www.aliyun.com/jiaocheng/811770.html; 下面則是我學習裝飾者的見解: 關於裝飾者模式運用的地方其實有很多,我第一次接觸到就是io流中,比如像這樣的: new InputStreamRea

Java 設計模式裝飾模式

本文為筆者學習《Head First設計模式》的筆記,並加入筆者自己的理解和歸納總結 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 結構圖 雞尾酒Cocktail一般以伏特加(Vodka)、威士忌(Whisky)等烈酒或是葡萄

設計模式裝飾模式java實現)

裝飾器模式(Decorator):結構型設計模式,為了實現類在不修改原始類的基礎上進行動態的覆蓋或者增加方法,該實現保持了跟原有類的層級關係。這種設計模式允許向一個現有的物件新增新的功能,同時又不改變其結構。算是一種非常特殊的介面卡模式。 在實際業務中,有時候我們會建立了多層子類,但如果當子

Java進階篇設計模式七 ----- 享元模式代理模式

前言 在上一篇中我們學習了結構型模式的組合模式和過濾器模式。本篇則來學習下結構型模式最後的兩個模式, 享元模式和代理模式。 享元模式 簡介 享元模式主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。 用通俗的話來

Java設計模式裝飾模式

一、概念       裝飾者模式:動態的將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。        關係圖: 說明: 裝飾者和被裝飾者物件有相同的超類你可以擁有一個

設計模式裝飾模式代理模式區別與聯絡

一.你在一個地方寫裝飾,大家就知道這是在增加功能,你寫代理,大家就知道是在限制      1.最常見的代理就是許可權判斷了,許可權就肯定是限制了      2.裝飾模式是指增強被包裝物件的功能        代理模式是修改被代理物件的行為      3.例子:      

大話設計模式裝飾模式總結-java實現

注:示例來自《大話設計模式》 現有如下要求 寫一個可以給人搭配不同的服飾的系統 程式碼如下 Person類 package Test06; public class Person { private String name; pub

Java設計模式裝飾模式

rgs println 應用 author nbsp bsp code 接口 main 1.裝飾器模式的定義(保持接口,擴展功能)   Decorate裝飾器,顧名思義,就是動態的給一個對象添加一些額外的職責,就好比對房子進行裝修一樣。 2.裝飾器模式的特征   具有

Java設計模式裝飾模式趣談

JVM:”上次給我招的工人不錯啊!” oo程式設計師:”………..” JVM:”現在來我開的博物館生意越來越好了,原來”舞臺劇

8.java設計模式裝飾模式

#### 基本需求: * 咖啡的種類有很多種,調料也有很多種,下單時,可以點單品咖啡也可以點單品咖啡+調料的組合,並計算下單時花費的金額 #### 傳統方式: * 方式一 * 建立一個抽象類Drink,讓所有的單品咖啡和組合咖啡都繼承Drink類(組合很多) * UML類圖 * ![](

java設計模式03裝飾者者模式

eal java設計 擴展 支持 其他 java設計模式 代理 rate 一個 動態地給一個對象添加一些額外的職責。就增加功能來說, Decorator模式相比生成子類更為靈活。該模式以對客 戶端透明的方式擴展對象的功能。 (1)在不影響其他對象的情況下,以動態、透明的方式

設計模式裝飾模式

一點 ron 測試類 實現類 stub generated class void nbsp 一.裝飾者模式特點:1.裝飾者和被裝飾者對象有相同的超類2.可以用一個或多個裝飾者包裝一個對象3.由於裝飾者和被裝飾者具有相同超類,所以任何需要被包裝對象的場合,可以用裝飾過的對象代