Dynamic proxy(一)

Proxy Pattern

代理是一種常用的設(shè)計(jì)模式茧妒,其目的就是為其他對(duì)象提供一個(gè)代理以控制對(duì)某個(gè)對(duì)象的訪問嘶伟。代理類負(fù)責(zé)為委托類預(yù)處理消息,過濾消息并轉(zhuǎn)發(fā)消息又碌,以及進(jìn)行消息被委托類執(zhí)行后的后續(xù)處理。

當(dāng)兩個(gè)類之間需要通信時(shí),引入第三方類 將兩個(gè)類的關(guān)系解耦看圾笨,對(duì)于客戶方只需要了解代理類即可擂达,不過代理類和委托類需要實(shí)現(xiàn)同一接口,因?yàn)閷?shí)際調(diào)用的還是委托類的方法抄腔。

什么是動(dòng)態(tài)代理模式

靜態(tài)代理

  • Subject 實(shí)例接口
package ProxyPattern.staticProxy;

public interface Subject {
    void doSomething();
}
  • RealSubject 實(shí)現(xiàn)接口邏輯
package ProxyPattern.staticProxy;

public class RealSubject implements Subject {
    @Override
    public void doSomething() {
        System.out.println("do something! ");
    }
}

如果想在doSomething()前后加上一些日志監(jiān)控等等一些業(yè)務(wù)邏輯,而需要被代理的類無需改動(dòng)奏寨。

  • SubjectProxy 代理對(duì)象
package ProxyPattern.staticProxy;

public class SubjectProxy implements Subject {
    private Subject subjectImpl = null;

    public SubjectProxy(Subject subject) {
        this.subjectImpl = subject;
    }

    @Override
    public void doSomething() {
        System.out.println("before real subject");
        subjectImpl.doSomething();
        System.out.println("after real subject");
    }
}
  • TestRunner
package ProxyPattern.staticProxy;

public class TestRunner {
    public static void main(String[] args) {
        Subject subjectProxy = new SubjectProxy(new RealSubject());
        subjectProxy.doSomething();
    }
}

結(jié)果

before real subject
do something! 
after real subject

動(dòng)態(tài)代理

為什么要?jiǎng)討B(tài)代理

靜態(tài)代理的缺點(diǎn)

  • 代理類和委托類實(shí)現(xiàn)了相同的接口,代理類通過委托類實(shí)現(xiàn)了相同的方法病瞳。這樣就出現(xiàn)了大量的代碼重復(fù)揽咕。如果接口增加一個(gè)方法悲酷,除了所有實(shí)現(xiàn)類需要實(shí)現(xiàn)這個(gè)方法外,所有代理類也需要實(shí)現(xiàn)此方法亲善。增加了代碼維護(hù)的復(fù)雜度设易。
  • 靜態(tài)代理只能實(shí)現(xiàn)特定的某個(gè)service,假設(shè)想要代理多個(gè)實(shí)現(xiàn)類蛹头,就需要寫多個(gè)代理顿肺。

動(dòng)態(tài)代理的好處

通過一個(gè)代理類完成全部的代理功能

動(dòng)態(tài)代理的應(yīng)用

  • Spring的AOP
  • 遠(yuǎn)程代理

相關(guān)參考

Java 動(dòng)態(tài)代理作用是什么?
JAVA學(xué)習(xí)篇--靜態(tài)代理VS動(dòng)態(tài)代理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渣蜗,一起剝皮案震驚了整個(gè)濱河市屠尊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕拷,老刑警劉巖讼昆,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斑胜,居然都是意外死亡控淡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門止潘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掺炭,“玉大人,你說我怎么就攤上這事凭戴〗ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵么夫,是天一觀的道長(zhǎng)者冤。 經(jīng)常有香客問我,道長(zhǎng)档痪,這世上最難降的妖魔是什么涉枫? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮腐螟,結(jié)果婚禮上愿汰,老公的妹妹穿的比我還像新娘。我一直安慰自己乐纸,他們只是感情好衬廷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汽绢,像睡著了一般吗跋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天跌宛,我揣著相機(jī)與錄音酗宋,去河邊找鬼。 笑死秩冈,一個(gè)胖子當(dāng)著我的面吹牛本缠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播入问,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丹锹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了芬失?” 一聲冷哼從身側(cè)響起楣黍,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棱烂,沒想到半個(gè)月后租漂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颊糜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年哩治,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衬鱼。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡业筏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟赫,到底是詐尸還是另有隱情蒜胖,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布抛蚤,位于F島的核電站台谢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岁经。R本人自食惡果不足惜朋沮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缀壤。 院中可真熱鬧朽们,春花似錦、人聲如沸诉位。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍糠。三九已至,卻和暖如春啤誊,著一層夾襖步出監(jiān)牢的瞬間岳瞭,已是汗流浹背拥娄。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞳筏,地道東北人稚瘾。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姚炕,于是被迫代替她去往敵國(guó)和親摊欠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理柱宦,服務(wù)發(fā)現(xiàn)些椒,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法掸刊,類相關(guān)的語法免糕,內(nèi)部類的語法,繼承相關(guān)的語法忧侧,異常的語法石窑,線程的語...
    子非魚_t_閱讀 31,632評(píng)論 18 399
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,143評(píng)論 30 470
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 隔壁老王是個(gè)很仗義的人 有一次看到街上有人搶劫 他沖上前 猛力飛起一腳 踢倒圍觀的群眾。
    留子堯閱讀 3,350評(píng)論 0 2