定义:
代理模式为其他对象提供一种代理以控制对这个对象的访问.(或者说是在两个目标对象之间,添加一个中间对象(这个对象叫做代理对象))
举个栗子:项目现在人手不够,项目经理需要招人,他去跟HR说,我需要一个什么什么样的人。然后HR去招人(HR就是一个代理人),进行前面的基础面试,到了差不多的时候,还需要项目经理自己面(代理角色要有真实角色的引用)
静态代理的要求:
- 代理角色与真实角色实现相同的接口
- 代理角色持有真实角色的引用
- 代理行为
public class Test01StaticProxy {
public static void main(String[] args) {
Manager manager = new Manager();
Hr hr = new Hr(manager);
hr.addUser();
// new Hr(new Manager()).addUser();
}
}
//需求 真实角色和代理角色都需要实现的接口
interface User{
void addUser();
}
//项目经理 //1)真实角色
class Manager implements User{
@Override
public void addUser() {
System.out.println("技术面试。。。");
}
}
//HR 代理角色
class Hr implements User{
//2) 代理角色持有真实角色的引用 才可以调用真实角色的功能
private Manager manager = null;
public Hr() {
}
public Hr(Manager manager) {
this.manager = manager;
}
@Override
public void addUser() {
//代理角色去完成的工作
System.out.println("发起面试信息。。");
System.out.println("预约面试。。。");
//需要真实角色去完成的工作
manager.addUser();
//后续的工作
System.out.println("谈薪资.....");
}
}
优点:
实现了客户端和目标对象之间解耦和
缺点:
代理类需要实现接口中的所有方法(需求), 如果接口中的方法改变了, 那么既需要修改目标类, 也需要修改代理类