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