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

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

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

2019-11-09 16:13:21
字體:
來源:轉載
供稿:網友

學習了一下代理設計模式,順便記錄一下心德。 代理模式在編程中比較常見同時在生活中我們也是比較常見的,比如讓同事給帶飯,找婚介公司給籌劃婚禮,找中介公司給你把房子租出去等。 代理模式使用場景: 對一個類我們不能獲取到某個對象或者不想直接獲取某個對象時可以通過一個代理對象間接訪問該對象,委托對象與代理對象需要實現相同的接口。 代理模式的幾個角色: 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就使用到了代理設計模式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊川县| 昭觉县| 乌拉特后旗| 康平县| 保亭| 文登市| 浮山县| 泾阳县| 铁力市| 博罗县| 太保市| 平陆县| 错那县| 崇州市| 上高县| 准格尔旗| 卓资县| 股票| 吉林省| 子长县| 双辽市| 南京市| 海盐县| 绥棱县| 井研县| 麻阳| 乌鲁木齐市| 郎溪县| 江陵县| 龙江县| 崇礼县| 水城县| 江北区| 左贡县| 永善县| 门头沟区| 玛沁县| 新闻| 张家港市| 呼伦贝尔市| 林芝县|