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