您的位置:首页 > 其它

设计模式之代理模式

2016-09-09 13:48 176 查看
代理模式(Proxy Pattern)


定义:

为其他对象提供一种代理以控制对这个对象的访问。

顾名思义,代理不就是一般找人去做事情吗,比如小时候找人打架,你不上,花钱雇人帮你干仗,这就是代理,两个有共同的目标,就是揍那个欺负你的人,就是两个人具备同一个接口,花钱雇人,我不动手,打手动手。其实生活中处处都存在这种模式,文明一点的讲,比如找律师打官司,定外卖。


好处:

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。


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的多态,交给别人去完成,但前提是知根知底,有共同的接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息