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的方法。

posted @ 2022-06-07 15:58  文艺复兴粉碎机  阅读(913)  评论(0)    收藏  举报