Java中的委托
Java中的委托:
这篇文章是让您更好的理解什么是委托。如果它帮到了您,请您给个小小的赞吧!
设计出委托这一概念,是为了提高代码的复用性。啥是代码的复用性呢?
假设你们老板给你布置了一个任务,你花了一阵功夫做完了。结果第二天,老板又给你布置了一个任务,这个任务很多地方和你昨天做的一样。你是不是会自然而然的借鉴你昨天是怎么干的?如果你直接能够使用昨天的工作方法,你就会轻松不少!
复用性就是这样。通过高度的抽象,让你的代码能适应更多种的情况,完成更多种情况的任务,这就是代码的复用性。
说完复用性,再来说说委托。
委托是一个对象请求另一个对象的功能,捕获一个操作并将其发送到另一个对象。
让我们直接从示例开始讲起。
public class A { void foo() { this.bar(); } void bar() { System.out.println("a.bar"); } public static void main(String[] args) { // TODO Auto-generated method stub A a=new A(); a.foo(); } }
上面的代码是一个简单的类的实现。输出的结果是a.bar。
现在我要开始写一个B类,但是这个B和A高度相似,我该使用什么方法呢?
继承肯定是可以的,但是委托也不失为一个更好的办法:
public class B { private A a; public B(A a) { this.a=a; } void foo() { a.foo(); } void bar() { System.out.println("b.bar"); } public static void main(String[] args) { // TODO Auto-generated method stub A a =new A(); B b =new B(a); b.foo(); b.bar(); } }
猜一猜最后的结果是什么?
结果可能令你不解:
a.bar
b.bar
现在让我们来看看为什么是这样吧。注意到:
public B(A a) { this.a=a; } void foo() { a.foo(); }
可以看出实际上b调用的foo方法实际上是a的foo方法,所以结果自然就是a.bar了;
这样,我就可以达到一种效果:我可以在B中直接复用A的方法。