一、背景
想像一下,现在我们要在系统中打印日志,该怎么办?直接能想到的简单暴力的方法就是在各个类的方法输出打印。但是你有没有想过,就算每个类每个方法都加上了,哪天系统日志显示和要求修改(增加内容,调整格式等等),怎么办?去一个一个类一个一个方法改么?这是不是听着都有点受不了?所以代理模式出现了。
二、概念
代理模式就像我们找房子的中介一样,我们把房屋需求描述给他,他给我们去找合适的房子,当然他可以在这中间做点事,比如加服务费,房租差价等(不然人家中介赚什么)。代理模式同样如此。
代理模式:为其他对象提供 “代理”来控制对象的访问,在某些场景下,一个对象不适合或不能直接引用另一个对象,代理对象可以在客户端 与 被代理对象 间起一个中介的作用。
三、代码实例
interface AbstractPro {/* 抽象接口 */
public void method();
}
class BeProxyeder implements AbstractPro {// 被代理的角色
@Override
public void method() {
System.out.println("被代理者执行的方法");
}
}
class Proxyer implements AbstractPro {// 代理者
private AbstractPro beenProxyeder;
public Proxyer() {
this.beenProxyeder = new BeProxyeder();
}
@Override
public void method() {
before();
beenProxyeder.method();
after();
}
public void before() {
System.out.println("执行前的代理方法");
}
public void after() {
System.out.println("执行后的代理方法");
}
}
public class ProxyPatternDemo {
public static void main(String agrs[]) {
AbstractPro proxyer = new Proxyer();
proxyer.method();
}
}