在看大话设计模式的时候,书上解说这个模式的时候是以一个给别人做嫁衣的故事。
貌似代理模式就是给别人做嫁衣,就是代理类为被代理类做嫁衣咯。
上图:
行为接口:
package com.tian.testproxy;
/**
* @Author Tianluhua
* @Date 2016年12月27日 上午11:11:51
*/
public interface GiveGift {
// 送娃娃
public void giveDolls();
// 松鲜花
public void giveFlowers();
// 送巧克力
public void giveChocolate();
}
实际追求MM的类:
他需要实现GiveGift接口,因为他要追妹子当然需要送礼物。
package com.tian.testproxy;
/**
* @Author Tianluhua
* @Date 2016年12月27日 上午11:14:44
*
* 追求MM的类
*/
public class Pursuit implements GiveGift {
private Girl mm;
public Pursuit(Girl mm) {
super();
this.mm = mm;
}
public void giveDolls() {
// TODO Auto-generated method stub
System.out.println("送娃娃给:" + mm.getName());
}
public void giveFlowers() {
// TODO Auto-generated method stub
System.out.println("送鲜花给:" + mm.getName());
}
public void giveChocolate() {
// TODO Auto-generated method stub
System.out.println("送巧克力给:" + mm.getName());
}
}
代理类:
package com.tian.testproxy;
/**
* @Author Tianluhua
* @Date 2016年12月27日 上午11:15:28
*
* 代理类
*/
public class Proxy implements GiveGift {
private Pursuit pursuit;
public Proxy(Girl mm) {
super();
this.pursuit = new Pursuit(mm);
}
public void giveDolls() {
// TODO Auto-generated method stub
pursuit.giveDolls();
}
public void giveFlowers() {
// TODO Auto-generated method stub
pursuit.giveFlowers();
}
public void giveChocolate() {
// TODO Auto-generated method stub
pursuit.giveChocolate();
}
}
客户端调用:
package com.tian.testproxy;
import java.lang.reflect.InvocationHandler;
import com.tian.testproxy.proxy.BookFacade;
import com.tian.testproxy.proxy.BookFacadeImpl;
import com.tian.testproxy.proxy.BookFacadeProxy;
/**
*
* 代理模式(Proxy),为其他对象提供一种代理以控制对象的访问
*
*/
public class Main {
public static void main(String[] args) {
// 静态代理
Girl jiaojiao = new Girl();
jiaojiao.setName("李娇娇");
Proxy proxy = new Proxy(jiaojiao);
proxy.giveDolls();
proxy.giveFlowers();
proxy.giveChocolate();
}
}
结果打印: