java設(shè)計(jì)模式學(xué)習(xí)之代理模式
代理模式(Proxy):為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。
代理模式結(jié)構(gòu)圖

模擬需求:3班小張喜歡1班小紅,但是不認(rèn)識(shí)小紅,委托1班小明送給小紅禮物。
1:創(chuàng)建一個(gè)小張和小明都能實(shí)現(xiàn)的接口。
package ProxyModel;
/**
* 總的接口
* @author 我不是張英俊
*
*/
interface ISendGift {
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
2:實(shí)現(xiàn)小張送禮物。
package ProxyModel;
/**
*
* 小張是送鮮花的本體,送其實(shí)是小張送的,小明只是借助小張的送的鮮花去給小紅
* @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:實(shí)現(xiàn)小明通過(guò)小張送的禮物,轉(zhuǎn)交給小紅。
package ProxyModel;
/**
* 小明轉(zhuǎn)送小紅禮物的完成方法,其實(shí)是借助小張送的禮物來(lái)完成的,此處小明即為代理
* @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:測(cè)試類:
package ProxyModel;
/**
* 需求,3班小張喜歡1班小紅,但是不認(rèn)識(shí)小紅,委托1班小明給小紅送東西
* 總結(jié):小張送小紅禮物,小張送,然后小明通過(guò)小張接過(guò)送的禮物,給小紅,
* 其實(shí)小明是借助小張送的禮物,來(lái)代理完成送禮物的操作。
* 代理模式
* @author 我不是張英俊
*
*/
public class test {
public static void main(String[] args) {
String mm="小紅";
Proxy xiaoming=new Proxy(mm);
xiaoming.GiveDolls();
xiaoming.GiveFlowers();
xiaoming.GiveChocolate();
}
}
5:控制臺(tái)
送小紅洋娃娃
送小紅鮮花
送小紅巧克力
總結(jié):
代理模式適用場(chǎng)景
1:遠(yuǎn)程代理,也就是為一個(gè)對(duì)象在不同的地址空間提供局部代表。這樣可以隱瞞一個(gè)對(duì)象存在于不同地址空間的事實(shí)。
2:虛擬代理,是根據(jù)需要?jiǎng)?chuàng)建開(kāi)銷很大的對(duì)象。通過(guò)它來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象。
3:安全代理,用來(lái)控制真實(shí)對(duì)象訪問(wèn)時(shí)的權(quán)限。
4:智能指引,是指當(dāng)調(diào)用真實(shí)的對(duì)象時(shí),代理處理另外一些事。
優(yōu)點(diǎn):
1:代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度;
2:代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用,這樣起到了保護(hù)目標(biāo)對(duì)象的作用。
缺點(diǎn):
1:由于在客戶端和真實(shí)對(duì)象之間增加了代理對(duì)象,因此有些類型的代理模式可能會(huì)造成請(qǐng)求的處理速度變慢;
2:實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解JAVA設(shè)計(jì)模式之代理模式
- Java設(shè)計(jì)模式之動(dòng)態(tài)代理模式實(shí)例分析
- Java設(shè)計(jì)模式之靜態(tài)代理模式實(shí)例分析
- 23種設(shè)計(jì)模式(7) java代理模式
- java設(shè)計(jì)模式筆記之代理模式
- java設(shè)計(jì)模式-代理模式(實(shí)例講解)
- Java設(shè)計(jì)模式之代理模式與裝飾模式實(shí)例詳解
- Java設(shè)計(jì)模式之代理模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- java設(shè)計(jì)模式之代理模式(Porxy)詳解
- java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)
- 詳解設(shè)計(jì)模式中的proxy代理模式及在Java程序中的實(shí)現(xiàn)
- Java使用設(shè)計(jì)模式中的代理模式構(gòu)建項(xiàng)目的實(shí)例展示
- 實(shí)例講解Java設(shè)計(jì)模式編程中如何運(yùn)用代理模式
- Java設(shè)計(jì)模式之代理模式(Proxy模式)介紹
- Java通俗易懂系列設(shè)計(jì)模式之代理模式
相關(guān)文章
java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼
本文主要介紹了java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
idea中開(kāi)啟Run Dashboard 和 快速?gòu)?fù)制項(xiàng)目并改變端口的方法
這篇文章主要介紹了idea中開(kāi)啟Run Dashboard 和 快速?gòu)?fù)制項(xiàng)目并改變端口的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
mybatis中 if-test 數(shù)字判斷的坑及解決
這篇文章主要介紹了mybatis中 if-test 數(shù)字判斷的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

