委托模式(非23 中涉及模式)

在看java反射时候看到了反射method.invoke()方法中的流程为,method.invoke,然后进入委派实现(DelegatingMethodAccessorImpl),再进入本地实现(NativeMethodAccessorImpl),最终到达目标方法。
这里使用了委派模式,那什么是委派模式?委派模式有什么好处?委派模式和代理模式有什么区别?接下来就从这三个方向进行探究!

什么是委派模式

创建一个接口,委派对象和具体实现对象(不止一个)都实现这个接口,方法调用时先进入委托实现方法,由委托实现根据具体情况来决定由哪个方法来具体实现。

如反射方法中:

class DelegatingMethodAccessorImpl extends MethodAccessorImpl {
    private MethodAccessorImpl delegate;
    //根据delegate 的值来决定是本地实现还是动态实现
    DelegatingMethodAccessorImpl(MethodAccessorImpl var1) {
        this.setDelegate(var1);
    }

    public Object invoke(Object var1, Object[] var2) throws IllegalArgumentException, InvocationTargetException {
        return this.delegate.invoke(var1, var2);
    }

    void setDelegate(MethodAccessorImpl var1) {
        this.delegate = var1;
    }
}

委托模式优点

1、持有被委托人的引用,不关心过程,只关心结果
2、能够动态的切换实现方法,在不同情况下使用不同的实现方案

委托模式和代理模式的区别

委托模式:只关心结果,可以由委托对象来决定由哪个类来实现
代理模式:只关心过程,被代理的对象是唯一的

你可能感兴趣的:(委托模式(非23 中涉及模式))