Android設計模式--代理模式,android設計模式--
1、定義:
為其他對象提供一種代理以控制對這個對象的訪問。
2、使用:
在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在用戶端和目標對象之間起到中介的作用。
3、作用:
代理對象可以在用戶端和目標對象之間起到中介的作用,這樣起到了的作用和保護了目標對象的作用。
4、劃分:
代理還分成遠程代理、虛代理、保護代理和智能指標;
以下寫了一個簡單的demo;
其中Bank是一個簡單對象,但是,不想對其進行相應的修改,
那麼,使用BankProxy 代理來訪問Bank對象,用來持有對Bank的使用,並加以保護作用等;
首先是銀行的介面;
package com.example.demo.Proxy;/** * 銀行介面 * @author qubian * @data 2015年6月3日 * @email naibbian@163.com * */public interface BankInterface {public String setBankName(String name);public void addCount();}
接下來是已經寫好,並需要保護的對象;
package com.example.demo.Proxy;/** * 銀行的實現 * @author qubian * @data 2015年6月3日 * @email naibbian@163.com * */public class Bank implements BankInterface{/** * 需要對銀行的名稱進行相關的操作 */@Overridepublic String setBankName(String name) {return name+"Bank_001";}@Overridepublic void addCount() {// 具體的操作}}
代理的類,具體的操作:
package com.example.demo.Proxy;/** * 代理類, 我不希望直接存取,Bank 類,即不希望修改 Bank類 * 這樣我就可以使用 代理 * @author qubian * @data 2015年6月3日 * @email naibbian@163.com * */public class BankProxy implements BankInterface{private Bank mBank;public void setmBank(Bank mBank) {this.mBank = mBank;}@Overridepublic String setBankName(String name) {if (mBank==null) {mBank = new Bank();}// 在代理的內部 實際上還是使用的 被代理的類// 只是可以 加上代理 也可以加上 自己的操作String setName =mBank.setBankName(name);//其他動作return setName;}@Overridepublic 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就是對其中的使用;