代理模式(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
比如:张三喜欢小红,但是他难以说出口,这个时候他想到了他的好兄弟,他于是拜托他的好兄弟李四代替他去给小红说喜欢他,送她鲜花,送她巧克力…
礼物接口:
public interface Gift {
//送洋娃娃
void GiveDolls();
//送鲜花
void GiveFlowers();
//送巧克力
void GiveChocolate();
}
追求者:
public class Pursuit implements Gift {
private Girl girl;
public Pursuit(Girl girl){
this.girl = girl;
}
@Override
public void GiveDolls() {
System.out.println(girl.getName()+"送你洋娃娃");
}
@Override
public void GiveFlowers() {
System.out.println(girl.getName()+"送你鲜花");
}
@Override
public void GiveChocolate() {
System.out.println(girl.getName()+"送你巧克力");
}
}
代理者:
public class Proxy implements Gift {
private Pursuit pursuit;
public Proxy(Pursuit pursuit){
this.pursuit = pursuit;
}
@Override
public void GiveDolls() {
pursuit.GiveDolls();
}
@Override
public void GiveFlowers() {
pursuit.GiveFlowers();
}
@Override
public void GiveChocolate() {
pursuit.GiveChocolate();
}
}
被追求者:
public class Girl {
private String name;
public Girl(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class Test {
public static void main(String[] args) {
Girl girl = new Girl("小红");
Pursuit pursuit = new Pursuit(girl);
Proxy proxy = new Proxy(pursuit);
proxy.GiveDolls();
proxy.GiveChocolate();
proxy.GiveFlowers();
}
}
小红送你洋娃娃
小红送你巧克力
小红送你鲜花
代理模式应用的场合
第一:远程代理。
第二:虚拟代理。
第三:安全代理。比如如何让不安全的集合变得安全。
第四:只能指引,是指当调用真是的对象时,代理处理另外一些事。