java設(shè)計模式學(xué)習(xí)之代理模式
代理模式(Proxy):為其他對象提供一種代理以控制對這個對象的訪問。
代理模式結(jié)構(gòu)圖
模擬需求:3班小張喜歡1班小紅,但是不認(rèn)識小紅,委托1班小明送給小紅禮物。
1:創(chuàng)建一個小張和小明都能實現(xiàn)的接口。
package ProxyModel; /** * 總的接口 * @author 我不是張英俊 * */ interface ISendGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); }
2:實現(xiàn)小張送禮物。
package ProxyModel; /** * * 小張是送鮮花的本體,送其實是小張送的,小明只是借助小張的送的鮮花去給小紅 * @author 我不是張英俊 * */ public class Pursuit implements ISendGift{ String mm; public Pursuit(String mm){ this.mm=mm; } @Override public void GiveDolls() { // TODO Auto-generated method stub System.out.println("送"+mm+"洋娃娃"); } @Override public void GiveFlowers() { // TODO Auto-generated method stub System.out.println("送"+mm+"鮮花"); } @Override public void GiveChocolate() { // TODO Auto-generated method stub System.out.println("送"+mm+"巧克力"); } }
3:實現(xiàn)小明通過小張送的禮物,轉(zhuǎn)交給小紅。
package ProxyModel; /** * 小明轉(zhuǎn)送小紅禮物的完成方法,其實是借助小張送的禮物來完成的,此處小明即為代理 * @author 我不是張英俊 * */ public class Proxy implements ISendGift{ Pursuit gg; public Proxy(String mm){ gg=new Pursuit(mm); } @Override public void GiveDolls() { // TODO Auto-generated method stub gg.GiveDolls(); } @Override public void GiveFlowers() { // TODO Auto-generated method stub gg.GiveFlowers(); } @Override public void GiveChocolate() { // TODO Auto-generated method stub gg.GiveChocolate(); } }
4:測試類:
package ProxyModel; /** * 需求,3班小張喜歡1班小紅,但是不認(rèn)識小紅,委托1班小明給小紅送東西 * 總結(jié):小張送小紅禮物,小張送,然后小明通過小張接過送的禮物,給小紅, * 其實小明是借助小張送的禮物,來代理完成送禮物的操作。 * 代理模式 * @author 我不是張英俊 * */ public class test { public static void main(String[] args) { String mm="小紅"; Proxy xiaoming=new Proxy(mm); xiaoming.GiveDolls(); xiaoming.GiveFlowers(); xiaoming.GiveChocolate(); } }
5:控制臺
送小紅洋娃娃
送小紅鮮花
送小紅巧克力
總結(jié):
代理模式適用場景
1:遠(yuǎn)程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱瞞一個對象存在于不同地址空間的事實。
2:虛擬代理,是根據(jù)需要創(chuàng)建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。
3:安全代理,用來控制真實對象訪問時的權(quán)限。
4:智能指引,是指當(dāng)調(diào)用真實的對象時,代理處理另外一些事。
優(yōu)點:
1:代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度;
2:代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用,這樣起到了保護目標(biāo)對象的作用。
缺點:
1:由于在客戶端和真實對象之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢;
2:實現(xiàn)代理模式需要額外的工作,有些代理模式的實現(xiàn)非常復(fù)雜。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解JAVA設(shè)計模式之代理模式
- Java設(shè)計模式之動態(tài)代理模式實例分析
- Java設(shè)計模式之靜態(tài)代理模式實例分析
- 23種設(shè)計模式(7) java代理模式
- java設(shè)計模式筆記之代理模式
- java設(shè)計模式-代理模式(實例講解)
- Java設(shè)計模式之代理模式與裝飾模式實例詳解
- Java設(shè)計模式之代理模式_動力節(jié)點Java學(xué)院整理
- java設(shè)計模式之代理模式(Porxy)詳解
- java設(shè)計模式—靜態(tài)代理模式(聚合與繼承方式對比)
- 詳解設(shè)計模式中的proxy代理模式及在Java程序中的實現(xiàn)
- Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示
- 實例講解Java設(shè)計模式編程中如何運用代理模式
- Java設(shè)計模式之代理模式(Proxy模式)介紹
- Java通俗易懂系列設(shè)計模式之代理模式
相關(guān)文章
SpringBoot?IDEA聯(lián)不了網(wǎng)創(chuàng)建項目的3種方式(官網(wǎng)創(chuàng)建版、阿里云版、手工制作版)
這篇文章主要介紹了SpringBoot?IDEA聯(lián)不了網(wǎng)創(chuàng)建項目的3種方式,主要包括官網(wǎng)創(chuàng)建版、阿里云版、手工制作版,具有一定的參考價值,感興趣的可以了解一下2023-09-09SpringBoot中使用HTTP客戶端工具Retrofit
這篇文章主要為大家介紹了SpringBoot中使用HTTP客戶端工具Retrofit方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06MyBatis動態(tài)SQL標(biāo)簽用法實例詳解
本文通過實例代碼給大家介紹了MyBatis動態(tài)SQL標(biāo)簽用法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-07-07