1、什么是代理模式?
比如你要买个房子的话,你一般需要去找房子中介,找到中介以后,让中介帮你去办操作,这就是代理模式!
客户端需要访问被代理类,需要先访问代理类,由代理类调用被代理类。
2、代理模式的构成
Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口;
Proxy(代理主题角色):实现了抽象主题,它拥有对真实主题的引用,这样它就可以操作真实的主题对象;
RealSubject(被代理角色):实现了抽象主题,里面实现了具体的业务操作;
3、代理模式实现方式有几种?
静态代理和动态代理
4、静态代理
静态代理人为创建好代理类,静态代理的实现方式有两种:继承、实现接口
5、静态代理缺点
如果代码被代理类非常多,那么就需要创建一堆代理类,那么代码就会很冗余!这个时候就要用到动态代理啦。
实现接口形式:
手动创建抽象主题角色
public interface Subject {
void send();
}
手动创建被代理类
public class RealSubject implements Subject {
public void send() {
System.out.println("实现主要业务逻辑");
}
}
代理类创建主要是为了增强被代理类
public class SubjectProxy implements Subject{
private RealSubject realSubject;
public void send() {
System.out.println("》》》》实现日志打印,或者其他操作");
realSubject.send();
System.out.println("》》》》实现日志打印,或者其他操作结束");
}
}
接下来我们用main方法来运行一下
public class SubjectMain {
/**
* @param args
*/
public static void main(String[] args) {
//新建代理类
SubjectProxy proxy = new SubjectProxy(new RealSubject());
proxy.send();
}
}
打印结果为:
》》》》实现日志打印,或者其他操作
实现主要业务逻辑
》》》》实现日志打印,或者其他操作结束
实现继承方式实现静态代理:
手动创建抽象主题角色
public interface Subject {
void send();
}
手动创建被代理类
public class RealSubject implements Subject {
public void send() {
System.out.println("实现主要业务逻辑");
}
}
代理类创建主要是为了增强被代理类
public class SubjectProxy extends RealSubject{
public void send() {
System.out.println("》》》》实现日志打印,或者其他操作");
super.send();
System.out.println("》》》》实现日志打印,或者其他操作结束");
}
}
接下来我们用main方法来运行一下
public class SubjectMain {
/**
* @param args
*/
public static void main(String[] args) {
//新建代理类
SubjectProxy proxy = new SubjectProxy();
proxy.send();
}
}
打印结果为:
》》》》实现日志打印,或者其他操作
实现主要业务逻辑
》》》》实现日志打印,或者其他操作结束
下一章:jdk动态代理模式