厦门建网站哪家好/目前最靠谱的推广平台
一、静态代理
总结:
代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。值得注意的是,代理类和被代理类应该共同实现一个接口,或者是共同继承某个类
不足:静态代理实现了目标对象的所有方法,一旦目标接口增加方法,代理对象和目标对象都要进行相应的修改,增加维护成本。代理对象只服务于一种类型的对象。
定义接口类:
public interface AdminService {void update();Object find();
}
定义接口实现类:
public class AdminServiceImpl implements AdminService{@Overridepublic void update() {System.out.println("修改管理系统数据");}@Overridepublic Object find() {System.out.println("查看管理系统数据");return new Object();}
}
代理类:
public class AdminServiceProxy implements AdminService {private AdminService adminService;public AdminServiceProxy(AdminService adminService) {this.adminService = adminService;}@Overridepublic void update() {System.out.println("判断用户是否有权限进行update操作");adminService.update();System.out.println("记录用户执行update操作的用户信息、更改内容和时间等");}@Overridepublic Object find() {System.out.println("判断用户是否有权限进行find操作");System.out.println("记录用户执行find操作的用户信息、查看内容和时间等");return adminService.find();}
}
测试类:
public class StaticProxyTest {public static void main(String[] args) {AdminService adminService = new AdminServiceImpl();AdminServiceProxy proxy = new AdminServiceProxy(adminService);adminService.update();System.out.println("=============================");adminService.find();System.out.println("¥¥¥¥¥¥¥¥¥¥¥¥¥");proxy.update();System.out.println("=============================");proxy.find();}
}
打印结果:
修改管理系统数据
=============================
查看管理系统数据
¥¥¥¥¥¥¥¥¥¥¥¥¥
判断用户是否有权限进行update操作
修改管理系统数据
记录用户执行update操作的用户信息、更改内容和时间等
=============================
判断用户是否有权限进行find操作
记录用户执行find操作的用户信息、查看内容和时间等
查看管理系统数据
通过观看代码以及实际debug验证,实际上就是代理类实现了与被代理共同的接口或者继承了共同的类,代理类中再通过构造方法传入目标对象,这个目标对象就是被代理对象,然后在代理类中重写接口方法,既能自定义新增方法,也能实现目标对象类方法的调用。