Android設計模式(四)--代理模式

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就是對其中的使用;





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章