需求:在调用UserManager中的方法之前先调用安全性检查方法
实现:重新定义一个实现UserManager的类UserManagerImplProxy,定义安全性检查的方法checkSecurity()提供一个持有UserManager实例构造方法,然后在每个方法里面先调用checkSecurity(),然后再用引用去调相关的方法。最后只需要在客户端实例化这个代理即可。
UserManager.java
UserManager { public void addUser(String username,String password); public void deleteUser(int id); public void modifyUser(int id,String username,String password); public String findUserById(int id); }
UserManagerImpl.java
/** * 实现UserManager接口的具体类 * @author nexiyi * */ public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { System.out.println("UserManagerImpl.addUser()..."); } public void deleteUser(int id) { System.out.println("UserManagerImpl.deleteUser()..."); } public String findUserById(int id) { System.out.println("UserManagerImpl.findUserById()..."); return null; } public void modifyUser(int id, String username, String password) { System.out.println("UserManagerImpl.modifyUser()..."); } }
UserManagerImplProxy .java
/** * 提供一个安全性检查方法:checkSecurity()在每调用增删改查的时候都必须调用该方法 * @author Administrator * */ public class UserManagerImplProxy implements UserManager { private UserManager userManager; public UserManagerImplProxy(UserManager userManager){ this.userManager = userManager; } public void addUser(String username, String password) { checkSecurity(); this.userManager.addUser(username, password); } public void deleteUser(int id) { checkSecurity(); this.userManager.deleteUser(id); } public String findUserById(int id) { checkSecurity(); this.userManager.findUserById(id); return null; } public void modifyUser(int id, String username, String password) { checkSecurity(); this.userManager.modifyUser(id, username, password); } private void checkSecurity(){ System.out.println("UserManagerImplProxy.checkSecurity()..."); } }
Client.java----模拟一个业务逻辑去调用
public class Client { public static void main(String[] args) { /*UserManager userManager = new UserManagerImpl(); userManager.addUser("zhangsan", "111");*/ UserManager userManager = new UserManagerImplProxy(new UserManagerImpl()); userManager.addUser("zhangsan", "111"); } }
运行结果:
UserManagerImplProxy.checkSecurity()...
UserManagerImpl.addUser()...
成功在每个方法之前调用了checkSecurity方法。
缺点:在每个方法之前都需要调用一下checkSecurity()方法,如果方法数量太多在维护的时候就会很麻烦。