認識Java中的代理模式

來源:互聯網
上載者:User

認識Java中的代理模式

首先來看一下代理模式的定義:
為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在用戶端和目標對象之間起到中介的作用, 其特徵是代理類與委託類有同樣的介面。代理模式是常用的Java設計模式。

代理模式能夠在不修改源碼的情況下增強方法,在方法前後增加日誌記錄,許可權管理等功能。

表現形式如:

在java中,代理模式分成2種:靜態代理模式和動態代理模式;今天我們主要討論的是靜態代理。

1 靜態代理
靜態代理模式滿足如下的幾個條件:
a.代理對象的類是真實存在的,並非動態產生的。
b.代理對象持有被代理對象的引用
c.代理對象中的方法通過被代理對象的引用調用被代理對象的方法,同時執行代理邏輯。

下面是一個簡單的代理模式,相關代碼說明已經在注釋中給出,不再另外說明

介面類:

/*
更多資源 www.bkjia.com
 * 介面
 * 代理類和委託類都必須實現該類
 */
public interface ISubject {
 
//處理任務的抽象方法
public void dealTask(String task);
}

委託類:

/*
+V.X java8733 擷取更多資源
 
 * 真實角色(被代理類,委託類)
 * 實現介面Isubject
 */
public class RealSubject implements ISubject {
 
@Override
public void dealTask(String task) {
//真實角色處理任務
System.out.println("正在"+task);
}
 
}

代理類:

/*
更多資源 www.bkjia.com
 
 * 代理類
 * 實現ISubject介面
 *  持有被代理類的引用
 */
public class Proxy implements ISubject {
 
//持有被代理類的引用
private RealSubject realSubject;
 
//在構造方法中初始化被代理類
public Proxy(RealSubject r) {
this.realSubject=r;
}
 
@Override
//在該方法中加入代理邏輯
public void dealTask(String task) {
System.out.println("開始幫忙....");
//加入線程睡眠類比幫忙的行為
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//真正執行動作的仍然是真實角色
realSubject.dealTask(task);
}
 
}

靜態工廠類: 

 /*
更多資源 www.bkjia.com
 
 * 靜態工廠類
 * 對於用戶端來說 並不關心執行動作的是代理對象還是真實角色
 * 所以我們建立一個靜態方法直接返回對象
 */
public class StaticFactory {
 
//調用此方法獲得執行個體
public static ISubject getInstance(){
return new Proxy(new RealSubject());
}
}

測試類別:

 /*
 * 測試類別(客戶類)
更多資源 www.bkjia.ocm
 */
public class Test {
 
public static void main(String[] args) {
//建立代理對象時需要一個真實對象的執行個體
ISubject instance = StaticFactory.getInstance();
//使用代理類的方法
instance.dealTask("敲代碼");
}
}

就是這樣,真正的業務功能還是有委託類來實現,但是在實現業務類之前的一些公用服務。例如在項目開發中我們沒有加入緩衝,日誌這些功能,後期想加入,我們就可以使用代理來實現,而沒有必要開啟已經封裝好的委託類。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.