代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 代理模式主要有3个类:
Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。RealSubject类,定义Proxy所代表的真实实体。Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。简单来说,就是定义一个接口,里面提供真实对象的各个方法,真实对象与代理类都实现这个接口,并且在代理类中有个真实对象的引用,用来调用真实对象的相关方法。
举例: 访问数据库,采用代理类进行访问
Subject类-IUserDao public interface IUserDao { public void add(); public void del(); } RealSubject类-MysqlUserDao、OracleUserDao public class MysqlUserDao implements IUserDao { @Override public void add() { System.out.println("Mysql添加用户"); } @Override public void del() { System.out.println("Mysql删除用户"); } } public class OracleUserDao implements IUserDao { @Override public void add() { System.out.println("Oracle添加用户"); } @Override public void del() { System.out.println("Oracle删除用户"); } } Proxy类-ProxyDao public class ProxyDao implements IUserDao { private IUserDao iUserDao; public ProxyDao(IUserDao iUserDao) { this.iUserDao = iUserDao; } @Override public void add() { if (iUserDao != null) { iUserDao.add(); } } @Override public void del() { if (iUserDao != null) { iUserDao.del(); } } } 主程序 public class Test { public static void main(String[] args) { ProxyDao proxyDao = new ProxyDao(new MysqlUserDao()); proxyDao.add(); proxyDao.del(); proxyDao = new ProxyDao(new OracleUserDao()); proxyDao.add(); proxyDao.del(); } }运行结果:
Mysql添加用户 Mysql删除用户 Oracle添加用户 Oracle删除用户这就是一个简单的代理模式的应用。