代理模式(proxy):為其他對象提供一種代理以控制對這個對象的訪問。
代理模式結構圖
模擬需求:3班小張喜歡1班小紅,但是不認識小紅,委托1班小明送給小紅禮物。
1:創建一個小張和小明都能實現的接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package proxymodel; /** * 總的接口 * @author 我不是張英俊 * */ interface isendgift { void givedolls(); void giveflowers(); void givechocolate(); } |
2:實現小張送禮物。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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:實現小明通過小張送的禮物,轉交給小紅。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package proxymodel; /** * 小明轉送小紅禮物的完成方法,其實是借助小張送的禮物來完成的,此處小明即為代理 * @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:測試類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package proxymodel; /** * 需求,3班小張喜歡1班小紅,但是不認識小紅,委托1班小明給小紅送東西 * 總結:小張送小紅禮物,小張送,然后小明通過小張接過送的禮物,給小紅, * 其實小明是借助小張送的禮物,來代理完成送禮物的操作。 * 代理模式 * @author 我不是張英俊 * */ public class test { public static void main(string[] args) { string mm= "小紅" ; proxy xiaoming= new proxy(mm); xiaoming.givedolls(); xiaoming.giveflowers(); xiaoming.givechocolate(); } } |
5:控制臺
送小紅洋娃娃
送小紅鮮花
送小紅巧克力
總結:
代理模式適用場景
1:遠程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱瞞一個對象存在于不同地址空間的事實。
2:虛擬代理,是根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。
3:安全代理,用來控制真實對象訪問時的權限。
4:智能指引,是指當調用真實的對象時,代理處理另外一些事。
優點:
1:代理模式能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度;
2:代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了保護目標對象的作用。
缺點:
1:由于在客戶端和真實對象之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢;
2:實現代理模式需要額外的工作,有些代理模式的實現非常復雜。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/hrlizhi/p/7651332.html