gpt4 book ai didi

java - 适配器模式如何帮助实现德米特定律

转载 作者:行者123 更新时间:2023-11-30 07:30:57 25 4
gpt4 key购买 nike

德米特定律 (LOD) 不鼓励长链调用。它表示仅对直接在类内组成的对象、或在方法内创建的对象、在方法中作为参数传递的对象调用方法。如果 B b; 是类 A 中的一个字段,并且 B 有一个 C 类型的字段,( >C c;) 然后在 A.java 中,调用 b.c.performOperation(); 并不是一个好习惯。

根据我的理解,我们应该在每个类中使用小方法来对它们内部的字段进行操作,而不是让外部世界提取字段并调用方法。我也知道我们可以使用访问者模式来实现这一点。但后来我读到 Adapter 也是实现这一点的一种方法,我无法理解。

Adapter 只是包含 Adaptee 类的对象,并实现另一个系统的接口(interface)(Adaptee接口(interface) 彼此不兼容)。它使用委托(delegate)来调用 Adaptee 上的方法。这里 LOD 并没有违反,但我不知道如果我们没有使用适配器模式,那么法律是如何被违反的?

我引用的引用资料来自网站:http://c2.com/cgi/wiki/LawOfDemeter?LawOfDemeter

ObjectQueries? and the AdapterPattern are two ways to implement the LawOfDemeter. -- DaveOrme

最佳答案

这就是我认为他们的意思:

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

假设我们有一个由其他人编写的类,它公开了一个公共(public)字段:

public class DataClass {
public Data data;
}

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

dataClass.data.doOperation()

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

public class DataClassAdapter {
DataClass wrappedInstance;

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

然后我们可以这样调用:

dataAdapter.doOperation();

没有调用链。

我认为“适配器”这个词在这里有些误用。虽然适配器模式有些相似。

关于java - 适配器模式如何帮助实现德米特定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36135668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com