Law of Demeter
(LOD)を呼び出すと、長時間の呼び出しができなくなります。クラス内で直接作成されたオブジェクト、またはメソッド内で作成されたオブジェクト、メソッド内でパラメータとして渡されたオブジェクトのみでメソッドを呼び出すと言います。 B b;
がクラスA
フィールドであるとB
が、その後、A.java
内b.c.performOperation();
を呼び出すためのよくない習慣をタイプC
、(C c;
)のフィールドを持っている場合。デモータの法則を実装する際のアダプタパターンヘルプがどのようにして
私の理解によれば、各クラスはフィールドを抽出してメソッドを呼び出すのではなく、フィールド内のフィールドで操作を行う小さなメソッドを持つべきです。また、これを達成するためにVisitor pattern
を使用できることを理解しています。しかし、私はアダプタを読むこともこれを実装する一つの方法です、私は理解できませんでした。
アダプタは、単にそれにAdaptee
クラスのオブジェクトを持っており、他のシステムのinterface
(両方Adaptee
とinterface
それぞれ、他に互換である)を実装します。 Adaptee
のメソッドを呼び出すために委譲を使用します。ここでLOD
は縫い目に違反していませんが、アダプターのパターンを使用していないかどうかはわかりません。
私から取ったリファレンスサイトからです:http://c2.com/cgi/wiki/LawOfDemeter?LawOfDemeter
ObjectQueries?およびAdapterPatternは、LawOfDemeter を実装する2つの方法です。 - DaveOrme
あなたが書いたものの拡張:アダプターパターンは緩やかに解釈されています。 *ラッパーメソッド*は、LoDを尊重しないコードの解決策です。 1つのパブリックメソッドを他の一連のカプセル化メソッドに変換するため、オブジェクトアダプタはラッパーとして見ることができます。 Façadeは同じことを行うことができます。それは単に委任(または間接参照)です。しかし、GoFアダプターパターンの[多型呼び出しを本質の一部として](http://stackoverflow.com/a/13323703/1168342)、オブジェクトアダプターは、そうでないコードの解決策ではありませんLoDを尊重する。 – Fuhrmanator