1. 静态代理
代理:为某个对象提供一个代理,以控制对这个对象的访问。代理类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理对象代替。
静态代理:所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
静态代理的角色分析:
抽象角色----一般使用接口或者抽象类来实现。房屋出租的接口Rent!
真实角色----被代理的角色房东Host!
代理角色----代理真实角色—代理真实角色后一般会做一些附属操作。中介代理,收中介费,看房等。
客户 ----使用代理角色来进行一些操作:Client测试类。
老师找对象:
抽象角色:---找对象这个接口!
真实角色:---老师
代理角色---婚介:百合,非诚勿扰
客户---女对象!
案例驱动:学生租房子
抽象角色:创建一个租房接口Rent
真实角色:房东Host类。
代理角色:中介Proxy类。
客户:client类。
好处:
1、 使得真实角色处理的业务更加纯粹,不再去关注一些公共的事情。
2、 公共的业务由代理来完成----实现业务的分工
3、 公共业务发生扩展时变得更加集中和方便
缺点:
1、 类多了---代理类就随着增多。工作量变大了。开发效率降低了。
public interface Rent { /** * * @Description:租房 * @author mengqx * @date 2017年7月10日 */ void rent(); } public class Host implements Rent{
@Override public void rent() { System.out.println("房东老大爷来了!开始租房了!"); }
}
public class UserProxy implements Rent {
private Host host;
public Host getHost() { return host; }
public void setHost(Host host) { this.host = host; }
@Override public void rent() { // 先看房! seeHose(); // 单纯的代表房东去租房屋 host.rent(); // 付款 pay(); // 收取网费 netpay(); // 增加房租 addPay(); }
// 看房 public void seeHose(){ System.out.println("黑心中介先带你看房!假好心!"); }
// 给钱 public void pay(){ System.out.println("真实的面目露出来了!来先签三年的合同!然后在押一付三!还要交一年卫生费!"); } // 收取网费 public void netpay(){ System.out.println("收取网费"); } // public void addPay(){ System.out.println("加钱!"); } }
public class Test { public static void main(String[] args) { // 测试静态代理开始租房 UserProxy up = new UserProxy(); // 该中介代理那个对象? up.setHost(new Host()); // 开始租房 up.rent(); } } |