1、定義:
爲其他對象提供一種代理以控制對這個對象的訪問。
2、使用:
在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
3、作用:
代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了的作用和保護了目標對象的作用。
4、劃分:
代理還分成遠程代理、虛代理、保護代理和智能指針;
以下寫了一個簡單的demo;
其中Bank是一個簡單對象,但是,不想對其進行相應的修改,
那麼,使用BankProxy 代理來訪問Bank對象,用來持有對Bank的使用,並加以保護作用等;
首先是銀行的接口;
package com.example.demo.Proxy;
/**
* 銀行接口
* @author qubian
* @data 2015年6月3日
* @email [email protected]
*
*/
public interface BankInterface {
public String setBankName(String name);
public void addCount();
}
接下來是已經寫好,並需要保護的對象;
package com.example.demo.Proxy;
/**
* 銀行的實現
* @author qubian
* @data 2015年6月3日
* @email [email protected]
*
*/
public class Bank implements BankInterface{
/**
* 需要對銀行的名稱進行相關的操作
*/
@Override
public String setBankName(String name) {
return name+"Bank_001";
}
@Override
public void addCount() {
// 具體的操作
}
}
代理的類,具體的操作:
package com.example.demo.Proxy;
/**
* 代理類, 我不希望直接訪問,Bank 類,即不希望修改 Bank類
* 這樣我就可以使用 代理
* @author qubian
* @data 2015年6月3日
* @email [email protected]
*
*/
public class BankProxy implements BankInterface{
private Bank mBank;
public void setmBank(Bank mBank) {
this.mBank = mBank;
}
@Override
public String setBankName(String name) {
if (mBank==null) {
mBank = new Bank();
}
// 在代理的內部 實際上還是使用的 被代理的類
// 只是可以 加上代理 也可以加上 自己的操作
String setName =mBank.setBankName(name);
//其他操作
return setName;
}
@Override
public void addCount() {
if (mBank==null) {
mBank = new Bank();
}
mBank.addCount();
//其他操作
}
}
使用:
package com.example.demo.Proxy;
public class UserProxy {
public void useBank()
{
BankInterface bank =new BankProxy();
bank.setBankName("招商銀行");
bank.addCount();
}
}
那麼,在Android中有很多地方都使用了代理:
1、Android的進程間通信時使用的AIDL,系統中利用AIDL定義一種遠程服務,就是一種遠程的代理模式;鏈接
2、源碼中ActivityManagerProxy類就是一個代理,它是ActivityManagerNative的代理,他們共有的接口IActivityManager,ActivityManager就是對其中的使用;