适配器模式如何帮助实现Demeter法则

时间:2016-03-21 15:49:25

标签: java oop design-patterns law-of-demeter

Law of Demeter(LOD)不鼓励长长的呼唤。它表示只调用直接在类中组成的对象的方法,或者在方法内创建的对象,在方法中作为参数传递的对象。如果B b;是班级A中的字段且B的字段类型为C,(C c;),则A.java内,{}致电b.c.performOperation();的好习惯。

根据我的理解,我们应该在每个类中使用小方法对其中的字段进行操作,而不是外部世界提取字段并调用方法。我也理解我们可以使用Visitor pattern来实现这一目标。但后来我读了Adapter也是实现这个的一种方法,我无法理解。

适配器只包含Adaptee类的对象,并实现另一个系统的interfaceAdapteeinterface彼此兼容)。它使用委托来调用Adaptee上的方法。这里LOD不会被违反,但我不知道我们是否会使用适配器模式然后法律如何被破坏?

我从中获取的引用来自网站:http://c2.com/cgi/wiki/LawOfDemeter?LawOfDemeter

  

ObjectQueries?和AdapterPattern是实现的两种方法   LawOfDemeter。 - DaveOrme

1 个答案:

答案 0 :(得分:1)

这就是我认为的意思:

当他们谈论使用适配器模式符合Demeter定律时,他们谈论的是另一种情况而不是您描述的标准适配器模式用例。

假设我们有一个类,其他人写的,暴露了一个公共领域:

public class DataClass {
    public Data data;
}

当我们想要访问代码中的任何地方的数据字段时,我们会得到调用链:

dataClass.data.doOperation()

适配器可用于“隐藏”此调用链:

public class DataClassAdapter {
    DataClass wrappedInstance;

    public void doOperation() {
        wrappedInstance.data.doOperation();
    }
}

然后我们可以这样打电话:

dataAdapter.doOperation();

没有通话链。

我认为“Adapter”这个词在这里有点滥用。尽管适配器模式有些类似。