|
Android系統中的進程間通信是通過一個輕量級的RPC(Remote Procedure Call遠程進程調用)和AIDL(Android Interface Definination Language)規範來生成兩個進程之間可以相互訪問的代碼。其中RPC是以接口方式來實現,客戶端與被調用實現之間是通過代理模式來實現的,這些又是以JAVA的RMI和代理模式為理論基礎的,若要靈活掌握這個輕量級的解決方案,有必要重新理順這些基礎知識的,這裡我們先了解代理模式的相關基礎,
有關代理模式的知識,可以用下面這個思維導圖來表示:
這里以一個代碼實例來說明實際運用:
1、抽像類Role代碼
- package com.magc.proxy;
-
- /**
- * @author magc
- *代理角色和真實角色的共同抽像類
- */
- public abstract class Role {
-
- // 作為代理角色和真實角色的共同接口,方便代理角色對外代替真實角色來提供服務
- public abstract void service(String user_id);
-
- }
複製代碼
2、真實角色類RealRole代碼
- package com.magc.proxy;
-
- /**
- * @author magc
- *真實角色類
- *對外是不可訪問
- *
- */
- public class RealRole extends Role {
-
- /* (non-Javadoc)
- * @see com.magc.proxy.Role#service()
- *提供服務
- */
- @Override
- public void service(String user_id) {
- System.out.println( " 真實角色為你服務…… " );
- }
- // 驗證用戶身份
- public boolean CheckUser(String user_id)
- {
- return true ;
- }
-
- }
複製代碼 3、代理類ProxyRole代碼:
- package com.magc.proxy;
-
- /**
- * @author magc
- *代理角色類
- *對客戶端開發其接口
- *內部可以直接引用真實角色實例,將客戶端的請求轉給真實角色實例
- *對轉發請求的前或者後面可以增加一些額外操作
- */
- public class ProxyRole extends Role {
- private RealRole realrole = null ;
-
- /* (non-Javadoc)
- * @see com.magc.proxy.Role#service()
- */
- @Override
- public void service(String user_id ) {
- System.out.println( " 代理角色為你服務…… " );
- // 需要時才去創建真實角色實例
- realrole = new RealRole();
- // 增加額外操作:驗證身份
- System.out.println( " 驗證身份…… " );
- if ( ! realrole.CheckUser(user_id))
- return ;
- System.out.println( " 去找真實角色實例幫忙處理事務…… " );
- realrole.service( " magc " );
-
- System.out.println( " 謝謝光臨…… " );
- }
-
- }
複製代碼 4、測試類RoleTest類代碼
- package com.magc.proxy;
-
- /**
- * @author magc
- *代理模式測試類
- *作為客戶端去請求調用代理類的接口。
- *客戶端只能訪問代理類,而不能訪問真實角色類
- */
- public class ProxyTest {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
-
- ProxyRole proxy = new ProxyRole();
- proxy.service( " magc " );
- }
-
- }
複製代碼 運行測試類,控制台輸出結果為:
由於時間倉促,錯誤難免,希望能給大家有所啟示,也算是在這裡拋磚引玉了,呵呵
轉帖 http://www.cnblogs.com/mandroid/archive/2011/02/24/1963357.html |
|