Java語言中代理模式簡介(一)

1 代理的作用

代理模式是常用的Java設計模式,它的特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會存在關聯(lián)關系,一個代理類的對象與一個委托類的對象關聯(lián),代理類的對象本身并不真正實現(xiàn)服務,而是通過調(diào)用委托類的對象的相關方法,來提供特定的服務。

2 代理模式的例子

假設有一個Italk接口,有空的方法talk(說話),所有的Person對象都實現(xiàn)(implements)這個接口,實現(xiàn)talk方法,程序有很多地方都將Person實例化,執(zhí)行talk方法,后來發(fā)現(xiàn)程序里有一些除了要說話以外還要唱歌(sing),那么我們既不能在Italk接口里增加sing()方法,又不能在每個Person對象都增加sing方法,我們只有增加一個代理類TalkProxy,這個代理類里實現(xiàn)talk和sing方法,然后在需要sing方法的地方調(diào)用代理類即可,代碼如下:

2.1 接口類Italk

public interface Italk

{

public void talk(String msg);

}

2.2 委托類Person

public class Person implements Italk

{

public String name;

public String age;

public Person(String name, String age)

{

this.name = name;

this.age = age;

}

public void talk(String msg)

{

System.out.println(msg + "! 大家好, 我是 " + name + ", 我年齡是 " + age);

}

}

2.3 代理類TalkProxy

public class TalkProxy implements Italk

{

private Italk talker;

public TalkProxy(Italk talker)

{

this.talker = talker;

}

public void talk(String msg)

{

talker.talk(msg);

}

public void talk(String msg, String singname)

{

talker.talk(msg);

sing(singname);

}

private void sing(String singname)

{

System.out.println("歌的名字是:" + singname);

}

}

2.4 測試類:

public class Test

{

public static void main(String[] args)

{

Italk person = new Person("張三", "20");

person.talk("hi");

System.err.println(">>>>>>>>>>>>>>>");

TalkProxy talker = new TalkProxy(person);

talker.talk("hi", "<<歌唱祖國>>");

}

}
2.5 代碼分析

代理分為靜態(tài)代理和動態(tài)代理,上面的例子是靜態(tài)代理,后面的文章我會再寫一下關于動態(tài)代理,以及使用ASM生成代理類的例子。

學習Java的同學注意了?。?!
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群346942462,我們一起學Java!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,687評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,478評論 0 3
  • 多態(tài) 任何域的訪問操作都將有編譯器解析,如果某個方法是靜態(tài)的,它的行為就不具有多態(tài)性 java默認對象的銷毀順序與...
    yueyue_projects閱讀 1,091評論 0 1
  • 日本和果子 種類繁多,東經(jīng)日語http://www.tokei.cn/也各有特色: 饅頭類(manjou):外皮以...
    大大大怪1閱讀 1,263評論 0 0

友情鏈接更多精彩內(nèi)容