1. 程式人生 > >JAVA設計模式之 代理模式【Proxy Pattern】

JAVA設計模式之 代理模式【Proxy Pattern】

一、概述

    給某一個物件提供一個代理,並由代理物件來完成對原物件的訪問。代理模式是一種物件結構型模式

二、適用場景

    當無法直接訪問某個物件或訪問某個物件存在困難時可以通過一個代理物件來間接訪問,為了保證客戶端使用的透明性,委託物件與代理物件需要實現相同的介面。


三、UML類圖

         

四、參與者

     1、介面類:Subject

          它聲明瞭真實訪問者和代理訪問者的共同介面,客戶端通常需要針對介面角色進行程式設計。

     2、代理類:ProxySubject

          包含了對真實(委託)物件(RealSubject)的引用,在實現的介面方法中呼叫引用物件的介面方法執行,從而達到代理的作用。看似是代理物件(ProxySubject)在操作,但其實真正的操作者是委託物件(RealSubject)。

    3、委託類/真實訪問類:RealSubject

         它定義了代理角色所代表的真實物件,在真實角色中實現了真實的業務操作,客戶端可以通過代理角色間接呼叫真實角色中定義的操作。


五、用例學習

    1、介面類:Subject.java

/**
 * 介面類
 * @author [email protected]
 *
 */
public interface Subject {

	public void visit();
}
    2、介面實現類,真實訪問物件/委託物件:RealSubject.java
/**
 * 介面實現類,真實訪問物件/委託物件
 * @author 
[email protected]
* */ public class RealSubject implements Subject { @Override public void visit() { System.out.println("I am 'RealSubject',I am the execution method"); } }
    3、介面實現類,代理物件:ProxySubject.java
/**
 * 介面實現類,代理物件
 * @author [email protected]
 *
 */
public class ProxySubject implements Subject {
	// 維持對真實委託物件的引用,該物件才是真正的執行者
	private Subject realSubject;
	
	public ProxySubject(Subject subject){
		this.realSubject = subject;
	}

	@Override
	public void visit() {
		// 真實委託物件 通過 代理物件的引用 間接的實現了對目標物件的訪問執行
		realSubject.visit();
	}
}
    4、客戶類 Client.java
/**
 * 客戶類
 * @author  [email protected]
 *
 */
public class Client {

	public static void main(String[] args) {
		Subject proxySubject = new ProxySubject(new RealSubject());
		proxySubject.visit();
	}

}

六、其他/擴充套件

    按照代理類的建立時期,代理類可以分為兩種:

    1、靜態代理:由程式設計師建立或特定工具自動生成原始碼,再對其編譯。在程式執行前,代理類的.class檔案就已經存在了。(上面用例介紹的就是 靜態代理技術)

    靜態代理的優劣分析:

    優點:客戶端面向介面程式設計,符合開閉原則,使系統具有好的靈活性和擴充套件性。

    缺點:從上面程式碼中我們可以發現 每一種代理類都是實現了特定的介面,及每一種代理類只能為特定介面下的實現類做代理。如果是不同介面下的其他實現類,則需要重新定義新介面下的代理類。     

    那麼是否可以通過一個代理類完成不同介面下實現類的代理操作呢?那麼此時就必須使用動態代理來完成。

    2、動態代理:在程式執行時,運用JAVA反射機制動態建立代理例項。

        【預告:關於動態代理技術  小呂將會在下一篇中詳細介紹】

—————————————————————————————————————

如果文章內容對您有幫助, 不要忘記 頂 一下,來支援一下哦!  

如果您對文章內容有任何疑問或有更好的見解, 可以通過評論留言或發郵件的方式聯絡我: 

[email protected]  /  [email protected]

如果需要轉載,請註明出處,謝謝!!

—————————————————————————————————————

相關推薦

JAVA設計模式 代理模式Proxy Pattern

一、概述     給某一個物件提供一個代理,並由代理物件來完成對原物件的訪問。代理模式是一種物件結構型模式。 二、適用場景     當無法直接訪問某個物件或訪問某個物件存在困難時可以通過一個代理物件來間接訪問,為了保證客戶端使用的透明性,委託物件與代理物件需要實現相同

java 設計模式代理模式(Proxy)

java 設計模式之代理模式(Proxy) 1. 概述 2.適用性 3.使用知識 4.核心思想 5. 類圖 6.dome 1. 概述 為其他物件提供一種代理以控制對這個物件的訪問

Java設計模式代理模式

代理模式是Java常見的設計模式之一。所謂代理模式是指客戶端並不直接呼叫實際的物件,而是通過呼叫代理,來間接的呼叫實際的物件。 代理模式的定義: 為其他物件提供一種代理,以控制對這個物件的訪問; 為其他物件提供一種代理以控制對這個物件的訪問。代理物件起到中介作用,可去掉功能

JAVA設計模式代理模式Proxy

wangking717 寫道 代理模式的作用是:為其他物件提供一種代理以控制對這個物件的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。 或者在一系列功能模組中加入一些擴充套件的功能模組,那個時候就會用到面向切

Java設計模式代理模式Proxy

前言:       最近在研究Retrofit開源框架的時候,其主要核心程式碼是通過註解標示引數,動態代理模式實現具體介面,反射機制進行引數解析,最終實現傳送請求。其實之前在學習Xutils原始碼的時候,Xutils 的task也是通過代理模式來訪問的。為何要採用代理模式呢?有什麼好處呢?抱著這些疑問!今天

JAVA設計模式----------代理模式Proxy

這裡只是簡單的介紹下最基本的代理的使用。 代理,通俗點說 :就是一個人或者一個機構代表另一個人或者另一個機構採取行動。 在一些情況下,一個客戶不想或者不能夠直接引用一個物件,而代理物件可以在客戶 端和目標物件之前起到中介的作用。代理模式給某一個物件提供一個代理物件,並由代

java設計模式代理模式

單擊 [] 部分 空間 快遞公司 存儲 交互 idt encoding 【學習難度:★★★☆☆,使用頻率:★★★★☆】 代理模式是常用的結構型設計模式之一,當無法直接訪問某個對象或訪問某個對象存在困難時可以通過一個代理對象來間接訪問,為了保證客戶端使用的透明性,所訪問的真實

設計模式 - 代理模式Proxy Pattern

ride proxy idt object catch 實例化 圖片 null 人在 代理模式:代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責為委托類預處理消息,過濾消息並轉發消息,以及進行消息被委托類執行後的後續處理。很多可以

設計模式代理模式 Proxy

net rac style and static his public 分享 con 定義與模型 ‘ 應用場景和分類 代碼實現 staticProxy 靜態代理 public interface Star { /** * 面談

java設計模式代理模式模式總結

女的 基礎 滿足 擴展 bsp span 代理 方法 這就是 定義:代理模式這種設計模式是一種使用代理對象來執行目標對象的方法並在代理對象中增強目標對象方法的一種設計模式。 解讀定義: 1.代理對象和目標對象有共同的接口;

java設計模式代理模式()

images 缺點 封裝 增加 處理 其他 -1 target 目標 代理模式(Proxy)     代理模式的主要作用是為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不想或不能直接引用其他的對象,而代理對象可以在客戶端和目標之間起   到中介的模式。

java設計模式代理模式 ,以及和java 回調機制的區別

-s pac 回調模式 unit 為什麽 創建 col 重要 溫習 java 代理模式就是:       將自己要做的事交給別人去做(這個別人就是代理者,自己就是被代理者),為什麽自己能做的要交給別人去做了?假如一個小學生小明,現在要寫作業,但是又想玩遊戲,他更想玩遊戲

c#設計模式代理模式(Proxy Pattern)

ole 購物 click size ont 業務 添加 .html 售票 引言 代理這個詞語,大家在現實世界已經頻繁的接觸過,例如火車站代理售票點,因為這些代理售票點的存在,我們不必要去火車站的售票處就可以查詢或者取到火車票.代理點本身是沒有能力生產車票的,我們在代理處享

設計模式代理模式Proxy)(2)

技術分享 strong 流程 imp pla 遠程調用 height bst 速度 代理模式是為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用,其特征是代理類與委托類有同

設計模式代理模式Proxy Pattern

意圖:為其他物件提供一種代理以控制對這個物件的訪問。 主要解決:在直接訪問物件時帶來的問題,比如說:要訪問的物件在遠端的機器上。在面向物件系統中,有些物件由於某些原因(比如物件建立開銷很大,或者某些操作需要安全控制,或者需要程序外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們

Java設計模式代理模式的靜態代理和動態代理

前言 代理模式分為靜態和動態。同時靜態代理又分為普通代理和強制代理。因此本文會通過示例的方式詳細介紹著三種代理模式。我們依然以網上購物為例。   普通代理 定義:要求客戶端只能訪問代理角色,而不能直接訪問真實角色。我們需要修改真實角色: 1 public class RealCon

Java設計模式代理模式的動態代理

前言 什麼是動態代理呢?動態代理指的是在實現階段不需要關心代理誰,而是在執行階段才指定哪一個物件。   動態代理示例 首先要介紹一下JDK提供的一個動態代理介面 InvocationHandler。這個介面的用途在於對代理類的方法進行代理,我們先實現InvocationHandle

Java設計模式代理模式的動態代理下篇

前言 上篇我們演示了使用JDK的InvocationHandler實現動態代理,本文我們採用cglib來實現動態代理。   動態代理示例 運用JDK的InvocationHandler是根據抽象介面來實現的,然而基於cglib來實現動態代理,被代理角色可以是一個普通的類,也可以是一個介面的實

設計模式代理模式java實現)

代理模式(Proxy):結構型的設計模式,目的是為其他物件提供一種代理以控制對這個物件的訪問。 即,它的思想是控制類或者介面對外的功能。 代理模式分為靜態代理模式和動態代理模式兩種。 在Spring中代理模式常見的是在AOP模組中,比如 JdkDynamicAopProxy

設計模式代理模式Proxy Pattern

應用場景 Proxy代理模式是一種結構型設計模式,主要解決的問題是:直接訪問物件時帶來的問題。 為了保持行為的一致性,代理類和委託類通常會實現相同的介面,所以在訪問者看來兩者並無區別。 代理類種類: 靜態:建立代理類再對其編譯,在程式執行前代理類的.class檔案就已