国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式——代理設計模式

2019-11-09 17:19:08
字體:
來源:轉載
供稿:網友

學習了一下代理設計模式,順便記錄一下心德。 代理模式在編程中比較常見同時在生活中我們也是比較常見的,比如讓同事給帶飯,找婚介公司給籌劃婚禮,找中介公司給你把房子租出去等。 代理模式使用場景: 對一個類我們不能獲取到某個對象或者不想直接獲取某個對象時可以通過一個代理對象間接訪問該對象,委托對象與代理對象需要實現相同的接口。 代理模式的幾個角色: Subject:抽象主題類 RealSubject:具體實現類 PRoxy:代理類,持有具體實現類的引用. 代理模式分為兩種:靜態代理+動態代理。

靜態代理

在代碼運行之前代理類的class編譯文件就已經存在。 看下簡單的代碼。根據上面說的委托對象與代理對象需要實現相同的接口。接口也就少不了。

接口

public interface iprogrammer { void program();}

實現類

public class AndroidProgrammer implements IProgrammer { @Override public void program() { Log.e("程序員","寫代碼"); }}

代理類

public class ProxyProgrammer { AndroidProgrammer programmer;//持有具體實現類的引用 public ProxyProgrammer(AndroidProgrammer programmer) { this.programmer = programmer; } public void program(){ programmer.program(); Log.e("你猜這是什么","答:靜態代理"); }}

調用

AndroidProgrammer programmer=new AndroidProgrammer(); ProxyProgrammer pp=new ProxyProgrammer(programmer); pp.program();

動態代理

通過反射機制動態的生成代理者的對象。在編程過程中我們不需要知道代理誰,只有在執行階段才知道代理的誰。在java中也為我們提供了invocationHandler接口方便我們實現動態代理。

接口(同上)

public interface IProgrammer { void program();}

實現類(同上)

public class AndroidProgrammer implements IProgrammer { @Override public void program() { Log.e("程序員","寫代碼"); }}

代理類(實現InvocationHandler 接口)

public class ProgrammerHandler implements InvocationHandler { AndroidProgrammer programmer; public ProgrammerHandler(AndroidProgrammer programmer) { this.programmer = programmer; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { programmer.program(); Log.e("你猜這是什么","答:動態代理"); return null; }}

調用

AndroidProgrammer programmer=new AndroidProgrammer(); ProgrammerHandler invocation=new ProgrammerHandler(programmer); IProgrammer ip= (IProgrammer) Proxy.newProxyInstance(AndroidProgrammer.class.getClassLoader(),new Class[]{IProgrammer.class},invocation); //也可以這么寫// IProgrammer ip= (IProgrammer) Proxy.newProxyInstance(AndroidProgrammer.class.getClassLoader(),programmer.getClass().getInterfaces(),invocation); ip.program();

小結

總體來講代理設計模式基本沒什么缺點并且應用廣泛,Android源碼中的ActivityManagerService就使用到了代理設計模式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗田县| 新安县| 翁牛特旗| 望江县| 富裕县| 榆中县| 临沂市| 芒康县| 玛纳斯县| 成武县| 赣州市| 陇川县| 吉安市| 藁城市| 龙岩市| 富蕴县| 大庆市| 洛宁县| 周至县| 澳门| 镇远县| 通山县| 铅山县| 莱阳市| 杭锦旗| 吴江市| 土默特左旗| 罗平县| 岑溪市| 陆丰市| 宜黄县| 米脂县| 连州市| 鸡西市| 荆州市| 石嘴山市| 樟树市| 荆门市| 原平市| 明溪县| 辉县市|