Java 适配器模式如何帮助实施德米特定律
德米特定律(LOD)不鼓励长时间的呼叫。它说只对类中直接组成的对象或在方法中创建的对象调用方法,这些对象在方法中作为参数传递。如果Java 适配器模式如何帮助实施德米特定律,java,oop,design-patterns,law-of-demeter,Java,Oop,Design Patterns,Law Of Demeter,德米特定律(LOD)不鼓励长时间的呼叫。它说只对类中直接组成的对象或在方法中创建的对象调用方法,这些对象在方法中作为参数传递。如果B是类a中的一个字段,B有一个类型为C,(C;)的字段,然后在a.java中调用B.C.performOperation()不是一个好的做法 根据我的理解,每个类中都应该有一些小方法,对它们内部的字段执行操作,而不是外部世界提取字段并调用方法。我也知道我们可以使用访客模式来实现这一点。但后来我读到适配器也是实现这一点的一种方法,我不理解 适配器只是在其中包含Adapt
B
是类a
中的一个字段,B
有一个类型为C
,(C;
)的字段,然后在a.java
中调用B.C.performOperation()不是一个好的做法代码>
根据我的理解,每个类中都应该有一些小方法,对它们内部的字段执行操作,而不是外部世界提取字段并调用方法。我也知道我们可以使用访客模式
来实现这一点。但后来我读到适配器也是实现这一点的一种方法,我不理解
适配器只是在其中包含Adaptee
类的对象,并实现另一个系统的接口
(Adaptee
和接口
彼此兼容)。它使用委托来调用Adaptee
上的方法。这里的LOD
没有被违反,但我看不出我们是否会使用适配器模式,那么法律是如何被违反的
我的参考资料来自以下网站:
对象查询?AdapterPattern和AdapterPattern是实现
德米特定律达维奥姆
这就是我认为他们的意思:
当他们谈论使用适配器模式来符合Demeter定律时,他们谈论的是另一种情况,而不是您描述的标准适配器模式用例
假设我们有一个其他人编写的类,它公开了一个公共字段:
public class DataClass {
public Data data;
}
当我们想要访问代码中任何位置的数据字段时,我们会得到调用链:
dataClass.data.doOperation()
适配器可用于“隐藏”此呼叫链:
public class DataClassAdapter {
DataClass wrappedInstance;
public void doOperation() {
wrappedInstance.data.doOperation();
}
}
然后我们可以这样称呼:
dataAdapter.doOperation();
没有呼叫链
我认为“适配器”这个词在这里有些误用。尽管适配器模式有些相似。扩展您所写的内容:适配器模式的解释比较松散。包装器方法是不考虑LoD的代码的解决方案。对象适配器可以看作是包装器,因为它们将一个公共方法转换为其他一系列封装方法。立面也可以做同样的事情,因为它只是授权(或间接)。但是,如果考虑GOF适配器模式,那么对象适配器不是不尊重LoD的代码的解决方案。