前文多次提到了代理(Proxy),那么到底什么才是代理呢?
类和类之间有3种关系:组合、继承和代理。
组合即是一个类包含另一个类的对象作为自己的一个field,如:
class A
{
class B b = new B() ;
......
}
继承就不多说了。如果把接口看作abstract class的延伸的话,那么对接口的实现也可以看作继承。
代理是组合的一种特殊形式。假设我们有上文的class A的对象a,如果要用class B提供的接口时,一般是a.b.function()或是a.b.field。如果我们这里不想暴露class B的接口的话,该怎么办?这时就可以用到代理。简单地说,代理就是重新封装class B的接口,使其成为class A的接口。如:
class A
{
class B b = new B();
void function()
{
b.function();
}
}
这样,客户端程序员在使用class A时,就不能接触到class B的接口了。