希夷之家

导航

Java静态代理

需求:在调用UserManager中的方法之前先调用安全性检查方法
实现:重新定义一个实现UserManager的类UserManagerImplProxy,定义安全性检查的方法checkSecurity()提供一个持有UserManager实例构造方法,然后在每个方法里面先调用checkSecurity(),然后再用引用去调相关的方法。最后只需要在客户端实例化这个代理即可。

/**
 * 定义UserManager接口,包含对用户增删改查四个抽象方法
 * 
@author Administrator
 *
 
*/

public interface 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);
}

 

/**
 * 实现UserManager接口的具体类
 * 
@author Administrator
 *
 
*/

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()");
    }


}

 

 

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()方法,如果方法数量太多在维护的时候就会很麻烦。

posted on 2009-10-15 11:02  希夷之家  阅读(319)  评论(0)    收藏  举报