代理模式html
爲其餘對象提供一種代理以控制這個對象的訪問.設計模式
場景:安全
經過"屌絲男士"委託"金牌代理"給校花"楊冪"送禮物的場景來了解代理模式ide
被追求者(校花)
/** * 被追求者(校花) */ public class SchoolGirl { /** * 芳名 */ private String name; public SchoolGirl(String name) { this.name=name; } /** * 獲取 芳名 * * @return name 芳名 */ public String getName() { return this.name; } /** * 設置 芳名 * * @param name 芳名 */ public void setName(String name) { this.name = name; } }
送禮物接口
/** * 送禮物接口 */ public interface GiveGift { /** * 送洋娃娃 */ void giveDolls(); /** * 送花 */ void giveFlowers(); /** * 送巧克力 */ void giveChocolate(); }
追求者類
/** * 追求者類 */ public class Pursuit implements GiveGift { /** * 名字 */ private String name; /** * 心儀的校花MM */ SchoolGirl schoolGirl; public Pursuit(String name) { this.name = name; } /** * 喜歡上一個MM * * @param schoolGirl */ public void like(SchoolGirl schoolGirl) { this.schoolGirl = schoolGirl; } @Override public void giveDolls() { if (this.schoolGirl == null) { return; } System.out.println(this.name + " 送洋娃娃給 " + this.schoolGirl.getName()); } @Override public void giveFlowers() { if (this.schoolGirl == null) { return; } System.out.println(this.name + " 送鮮花給 " + this.schoolGirl.getName()); } @Override public void giveChocolate() { if (this.schoolGirl == null) { return; } System.out.println(this.name + " 送巧克力給 " + this.schoolGirl.getName()); } }
職業代理人
/** * 職業代理人 */ public class ProxyMan implements GiveGift { /** * 委託人 */ private Pursuit pursuit; /** * 構造代理人 * @param pursuit * @param schoolGirl */ public ProxyMan(Pursuit pursuit, SchoolGirl schoolGirl) { //委託人 this.pursuit = pursuit; //心儀女神 this.pursuit.like(schoolGirl); } @Override public void giveDolls() { this.pursuit.giveDolls(); } @Override public void giveFlowers() { this.pursuit.giveFlowers(); } @Override public void giveChocolate() { this.pursuit.giveChocolate(); } }
調用post
public class ProxyDemo { public static void main(String[] args) { //校花楊冪 SchoolGirl schoolGirl=new SchoolGirl("楊冪"); //委託人 Pursuit pursuit=new Pursuit("屌絲男士"); //金牌代理人,接受 屌絲男士 追求 楊冪 任務 ProxyMan proxyMan=new ProxyMan(pursuit,schoolGirl); //洋娃娃腐化 proxyMan.giveDolls(); //鮮花腐化 proxyMan.giveFlowers(); //巧克力腐化 proxyMan.giveChocolate(); } }
結果ui
屌絲男士 送洋娃娃給 楊冪
屌絲男士 送鮮花給 楊冪
屌絲男士 送巧克力給 楊冪
解析this
1.遠程代理,也就是爲一個對象在不一樣的地址空間提供局部表明,這樣能夠隱藏一個對象存在於不一樣地址空間的事實.url
2.虛擬代理,是根據須要建立開銷很大的對象,經過他來存放實例化須要很長時間的真實對象.spa
3.安全代理,用來控制真實對象訪問時的權限.設計
4.智能指引,是指當調用真實的對象時,代理處理另一些事.