代理模式属于结构形设计模式
为什么会用到代理模式:
例如,单身的码农找对象时会请媒婆来帮助自己,这时候就使用到了代理模式,码农就是一个被代理类,而媒婆就是一个代理类,客户端只需要调用代理类(媒婆)的方法就可以实现被代理类(码农)的需求。
静态代理: 先上代码
// 首先创建一个接口(人类)
public interface StaticProxyPerson {
// 定义接口‘找对象’
void findLove();
}
/**
* 定义程序员类 实现StaticProxyPerson接口
*/
public class ChengXuYan implements StaticProxyPerson {
/**
* 实现'找对象'接口
*/
public void findLove() {
System.out.println("被代理类: 漂亮");
}
}
/**
* 代理类 '媒婆'
*/
public class MeiPo implements StaticProxyPerson {
private StaticProxyPerson target;
public MeiPo(StaticProxyPerson target) {
this.target = target;
}
public void findLove() {
System.out.println("代理类: 开始给被代理类找对象");
System.out.println("代理类: 找到了,名字叫翠花,你看看怎么样? @被代理类");
target.findLove();
System.out.println("代理类: 那好,我再去找翠花聊聊");
}
}
public static void main(String[] args) {
// 被代理类
ChengXuYan chengXuYan = new ChengXuYan();
// 代理类
MeiPo meiPo = new MeiPo(chengXuYan);
meiPo.findLove();
}
最后运行结果:
代理类: 开始给被代理类找对象
代理类: 找到了,名字叫翠花,你看看怎么样? @被代理类
被代理类: 漂亮
代理类: 那好,我再去找翠花聊聊
以上就是java静态代理的实现, 但是在实现了业务的同时也有很多缺点:
- 当被代理类增加新的方法时 代理类也要同时增加 违背了开闭原则