所谓代理模式就是将使用者和原始对象隔开,通过代理类创建对象来间接操作被代理类对象。这样做的好处是可以将被代理类及其对象屏蔽掉。
interface A { // 业务接口,最重要, 把所有类都联系起来了.
public void r();
}
class B implements A {
@Override
public void r() {
System.out.println("被代理类!");
}
}
//
class C implements A { // 代理对象也要实现业务接口, 表明代理对象也具有业务能力.
private A a = new B(); // 对象关联被代理对象.
@Override
public void r () {
System.out.println("开始代理!");
a.r(); // 真正的业务方法是被代理对象的
System.out.println("代理结束!");
}
}
class Client {
public static void main(String[] args) {
A a = new B(); // 创建代理对象, 因为被代理对象访问不到
a.r ();
}
}
上面的代码就是代理模式的过程。类C是类B的代理类,它们都要实现A接口并实现r()方法。在代理类B中需要创建被代理类对象,这样一旦在外面创建一个代理类对象,也会自动间接地创建一个被代理类的对象。代理类也和被代理类一样需要实现接口的方法,并且在方法中利用被代理类对象调用被代理类对象的方法,这样在外部利用代理类对象调用方法实际上就是调用的被代理类对象的方法。这样,就实现了代理模式。(整个过程还用到了多态)。
by Karl