什么是代理模式?
对于一个类的方法的调用,不直接通过该类的对象来调用方法,程序里有一个专门的代理类,通过调用代理类的方法来实现真实类内部方法的调用。
特征是:代理类和委托类有同样的接口,代理类主要负责为委托类预处理信息、过滤信息、把信息转发给委托类、以及时候处理信息等。代理类对象类本身并不真正实现服务,而是通过调用委托类的相关对象的方法,来提供特定的服务。
代理分为静态代理和动态代理
静态代理:
/** * 1.创建接口 */ public interface IUserAccount { void getMoney(double money); void search(); } /** * 创建接口实现类 */ public class Useroperaton implements IUserAccount{ @Override public void getMoney(double money) { System.out.println("小明用户取了"+money+"元"); } public void getTrueMoney(double money, Date date) { System.out.println("小明用户取了"+money+"元,取钱的时间为:"+date); } @Override public void search() { System.out.println("小明查询了账户余额"); } } /** * 代理类要实现代理对象的接口 */ public class ProtyDemo implements IUserAccount { private Useroperaton useroperaton = null;//被代理类对象 public ProtyDemo(Useroperaton useroperaton) { this.useroperaton = useroperaton; } public void getMoney(double money) { System.out.println("代理真实方法执行前,切入的代码执行了"); useroperaton.getTrueMoney(1000,new Date()); System.out.println("代理真实方法执行后,切入日志保存代码"); } @Override public void search() { useroperaton.search(); } } /** * 测试方法 */ public class Demo { public static void main(String[] args) { ProtyDemo protyDemo = new ProtyDemo(new Useroperaton()); protyDemo.getMoney(1000); } }
/**
* 代理模式的优点:
* 1.可以隐藏代码的真实方法,代码的实现更安全
* 2.可以在代理类集中的切入某些代码,如日志的切入
* 缺点:
* 1.由于在客户端和真是主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
* 2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
*/