我的理解:
代理指替代别人做事的人,他的能力不能超出被代理人的能力范围,但在能力范围内代理可以自己做决定。
实现代码:
public interface IUserDAO
{
public void setUser(User user);
public User getUser();
}
public class UserDAO implements IUserDAO
{
public void setUser(User user)
{
// do something
}
public User getUser()
{
// do something
}
}
public class UserDAOProxy implements IUserDAO
{
private IUserDAO userDao=null;
public UserDAOProxy()
{
}
public void setUser(User user)
{
// do something
this.createUserDAO();
userDao.setUser(user);
}
public User getUser()
{
// do something
this.createUserDAO();
return userDao.getUser();
}
private synchronized createUserDAO()
{
if(userDao==null)
userDao=new UserDAO();
}
}
解析:
代理(UserDAOProxy)和本人(UserDAO)都继承自同一接口IUserDAO,代理包含一个本人的引用,当代理接到请求后,将请求转发给本人处理,但代理可以在处理前后加上自己的处理功能。
适用性:
1、保护受访问资源。如上例中,可以在UserDAOProxy的注释do something下添加身份验证的代码,确保对UserDAO操作的合法性。
2、延迟耗费资源或时间的对象的创建。如上例中,假设UserDAO是个大对象,通过UserDAOProxy,可以使将UserDAO的创建推迟到适用时。UserDAO也可以是网络上的远程资源,只有在用到他时,才去取得他。