代理模式详解
-
- 1.代理模式简介
- 2.静态代理
- 3.JDK动态代理
- 4.CGLIB动态代理
1.代理模式简介
- 设计模式:是为了解决某一类问题的产生
- 代理模式分为:
静态代理
动态代理[JDK动态代理、CGLIB动态代理] - 代理模式的三个要素
抽象的类或者接口 —完成一件怎样的事情
被代理对象—事情操作具体内容
代理对象----帮助我们完成事情的同是可以增加其他的功能 - 具体的例子: 我们找中介租房子
抽象的类或者接口–租房子
被代理对象—房东
代理对象—中介 - 代理模式的好处 :
房东可以安心的做自己的事情–(被代理对象可以做自己的事情)
我们有了问题直接找中介—(被代理对象变得比较的安全)
可以增强代码的扩展性 - 静态代理模式缺点
随着被代理对象的增多,我们发现代理对象的压力越来越大,而且里面书写的代码也是比较臃肿的 - JDK代理模式的缺点
JDK代理模式是必须有接口的操作,如果没有对应的接口,这个时候JDK代理就没有办法使用
2.静态代理
以租房为例子:
package com.proxy1;
//定义我们需要完成租房的事情
public interface LetRoom {
void zf();
}
package com.proxy1;
public class FD implements LetRoom {
@Override
public void zf() {
System.out.println("--出租地球村XX号一楼--");
}
}
package com.proxy1;
public class FD2 implements LetRoom {
@Override
public void zf() {
System.out.println("--出租地球村XX号二楼--");
}
}
package com.proxy1;
public class ZJ implements LetRoom {
private int money;
public ZJ(int money) {
this.money = money;
}
@Override
public void zf() {
System.out.println("---收取推荐费50元---");
//出租房东的租房--中介调用的租房方法仍然是房东的租房方法
if (money <= 800) {
FD fd = new FD();
fd.zf();
} else if (money < 2000 &&