静态代理是一种设计模式
其目的(好处):
1.让需要实体类只包含需要实现的功能,不用包含一些公共辅助性质的类。(就像你玩游戏出纯输出一样,带线治疗交给队友)
2.方便后期增加功能,增加功能(在代理类中添加方法,实体类不用做更改)
一般用租房中介的例子来比喻:
房主为:RealSubject类,即真实实体。
中介为:Proxy类,即代理真实实体的类的代理类(我感觉类似于辅助吧)
【保存一个引用使得代理可以访问实体,并提供一个与subject的相同的接口,来达到代理的目的】
出租房屋:subject类,即房主和中介的目的,一般为一个抽象方法或者接口
【定义了realSubject和Proxy的共同接口,这样就在任何使用RealSubject的地方都可以使用Proxy】
租客就是主程序呀
**对比:
不使用静态代理的源代码
class Master{
public void rent(){...}
public void pay(){...}
public void see(){...}
}
(伪代码啊)
Master master=new Master();//得到一个房主对象
master.see();//看房
master.rent();//主要目的
master.pay()//交房租
使用静态代理的源代码:
Master类//房主,RealSubject
package org.lanqiao.proxyDemo;
public class Master implements Rent {
@Override
public void rent() {
// TODO Auto-generated method stub
System.out.println("房子租给你,钥匙给");
}
}
Proxy类//中介,proxy
package org.lanqiao.proxyDemo;
public class Proxy implements Rent {
private Master master;
public Proxy(Master master) {
super();
this.master = master;
}
@Override
public void rent() {
// TODO Auto-generated method stub
seeHouse();
sign();
master.rent();//代理的方法
payForFee();
}
public void seeHouse() {
System.out.println("带你看房");
}
public void sign() {
System.out.println("把合同签了吧");
}
public void payForFee() {
System.out.println("该交中介费了");
}
}
Rent接口//subject
只声明,不实现
package org.lanqiao.proxyDemo;
public interface Rent {
public void rent();
}
主函数包含的类
package org.lanqiao.proxyDemo;
public class Travelor {
public static void main(String[] args) {
Proxy proxy=new Proxy(new Master());
proxy.rent();
}
}
为了达到的效果:
可见为了达到相同的效果,普通的方法调用中RealSuject添加了很多辅助方法很乱,如果要辅助实现的方法很多就更加的乱。
代理模式就可以让它简单许多