滴水穿石--Java静态代理

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

 

 

转载于:https://www.cnblogs.com/nexiyi/archive/2012/12/06/2806360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值