Demeter Law - 在另一个 class 的方法中调用 class 的方法

Demeter Law - Calling a method of a class inside another method of a different class

如果我有一个 class C 包含一个方法 f,该方法将 D 类型的对象作为参数(我定义的另一个 class)

如果我在方法f里面调用对象D的方法,会不会违反得墨忒耳定律?为什么?

例如:

public C {
    public void f(D object) {
        int x = object.sumOfNumbers(2,3);
    }
}                    

这个调用并没有违反得墨忒尔定律。要违反它,您需要这样做:

In this case, an object A can request a service (call a method) of an object instance B, but object A should not "reach through" object B to access yet another object, C, to request its services

来源:Wikipedia

您没有到达代码中的对象 C。

使用维基百科中使用的 class 个名称(A、B、C),您的问题代码应如下所示:

public class A {
    public void f(B object) {
        int x = object.sumOfNumbers(2,3);
    }
}

这里没有你访问的Cclass

这里违反了这条法律:

public class A {
    public void f(B object) {
        C myC = object.getC();
        int x = myC.sumOfNumbers(2,3);
    }
}