代理模式使用方便简单,Java中的代表作:1、Thread类和Runnable接口的关系,2、Spring框架的AOP了。
代理模式关键点:1、需要有真实角色和代理角色;2、两者之间需要都实现了相同的接口的方法。3、代理角色需要有一个以接口为参数的构造方法。
//首先是定义接口
//接口给出定义好的功能方法,真实角色和代理角色都会实现相同的方法。
interface SafeMode{
void check();
}
//用户角色
class User implements SafeMode{
private String name;
public User(String name) {
this.name = name;
}
@Override
public void check() {
System.out.println("检索员工"+ name + "的信息...");
}
}
//代理角色
class Company implements SafeMode{
private SafeMode safe;
public Company() { //默认的构造器
}
public Company(SafeMode safe){ //添加拥有借口参数的构造器,Thread也有这种构造器,可以参考AIP文档。
this.safe = safe;
}
public void before(){
System.out.println("生物磁场扫描启动中.....");
}
public void after(){
System.out.println("生物磁场扫面结束。");
}
//该方法中在调用check方法之前和之后都调用了其他的方法,在Spring中的AOP就是这样。
@Override
public void check() {
before();
safe.check();
after();
}
}
//开始测试
public class StaticProxy {
public static void main(String[] args) {
SafeMode user = new User("张三");
SafeMode company = new Company(user);//把真实角色作为参数传入代理角色
company.check();
}
}