设计模式之代理模式
2016-09-09 13:48
176 查看
代理模式(Proxy Pattern)
为其他对象提供一种代理以控制对这个对象的访问。
顾名思义,代理不就是一般找人去做事情吗,比如小时候找人打架,你不上,花钱雇人帮你干仗,这就是代理,两个有共同的目标,就是揍那个欺负你的人,就是两个人具备同一个接口,花钱雇人,我不动手,打手动手。其实生活中处处都存在这种模式,文明一点的讲,比如找律师打官司,定外卖。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
![](http://img.blog.csdn.net/20160909135203725?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
举个例子吧,就比如现在的社会,拖欠农民工工资问题非常严重,王伯打算找个律师去帮他打官司来要回工钱。
那我们先定义一个接口IGetMoney,实现两个方法,举报黑心大老板以及法庭辩护
那么接下来,王伯出场,实现接口。
这年头自己势力小,请个律师吧,接下来律师登场。
调用实现下。
![](http://img.blog.csdn.net/20160909135122077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这单单是王伯一人,假如李伯,张伯,都请这个律师做代理,一对N,这样的设计模式就方便了很多,写出李伯,张伯类去实现接口,到时候直接调用就可以。其实说白了,代理模式主要还是使用了java的多态,交给别人去完成,但前提是知根知底,有共同的接口。
定义:
为其他对象提供一种代理以控制对这个对象的访问。顾名思义,代理不就是一般找人去做事情吗,比如小时候找人打架,你不上,花钱雇人帮你干仗,这就是代理,两个有共同的目标,就是揍那个欺负你的人,就是两个人具备同一个接口,花钱雇人,我不动手,打手动手。其实生活中处处都存在这种模式,文明一点的讲,比如找律师打官司,定外卖。
好处:
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
UML:
事例演示:
举个例子吧,就比如现在的社会,拖欠农民工工资问题非常严重,王伯打算找个律师去帮他打官司来要回工钱。那我们先定义一个接口IGetMoney,实现两个方法,举报黑心大老板以及法庭辩护
public interface IGetMoney { // 举报 void report(); // 辩护 void advocacy(); }
那么接下来,王伯出场,实现接口。
public class WangBo implements IGetMoney { public void report() { // 举报黑心大老板 System.out.println("老子要举报这个黑心老板,欠钱不还"); } public void advocacy() { // 法庭一通辩护 System.out.println("某年某月,在工地施工,最后,不给钱。。。。"); } }
这年头自己势力小,请个律师吧,接下来律师登场。
public class Lawyer implements IGetMoney { private IGetMoney iGetMoney; public Lawyer(IGetMoney money) { iGetMoney = money; } public void report() { iGetMoney.report(); } public void advocacy() { iGetMoney.advocacy(); } }
调用实现下。
public class Client { public static void main(String[] args) { WangBo wangbo=new WangBo(); Lawyer law=new Lawyer(wangbo); law.report(); law.advocacy(); } }
这单单是王伯一人,假如李伯,张伯,都请这个律师做代理,一对N,这样的设计模式就方便了很多,写出李伯,张伯类去实现接口,到时候直接调用就可以。其实说白了,代理模式主要还是使用了java的多态,交给别人去完成,但前提是知根知底,有共同的接口。
相关文章推荐
- 设计模式----Proxy(代理)模式
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 设计模式 --- 代理模式(Proxy) 精选经验合集
- 深入浅出基于Java的代理设计模式
- 设计模式之Proxy(代理)
- 设计模式与泡mm的关系之Proxy代理模式及代理模式的再思考
- 设计模式(6)-代理模式(Proxy)
- Java设计模式:Proxy(代理)
- 设计模式之Proxy(代理)
- 深入浅出基于Java的代理设计模式
- 设计模式——代理模式
- 设计模式之代理模式(Proxy)
- C#中利用代理实现观察者设计模式
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式(8)-代理模式(Proxy)