less than 1 minute read

类和类之间有 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 的接口了。

Tags:

Categories:

Updated:

Comments