Law of Demeter
(LOD) helfen, entmutigt eine lange Anrufkette. Es wird angegeben, dass Methoden nur für die Objekte aufgerufen werden sollen, die direkt in der Klasse erstellt wurden, oder für die Objekte, die in einer Methode erstellt wurden. Objekte werden als Parameter in Methoden übergeben. Wenn B b;
ein Feld in Klasse A
ist und B
ein Feld vom Typ C
hat, (C c;
) dann innerhalb A.java
, ist es nicht ratsam, b.c.performOperation();
zu rufen.Wie Adaptermuster bei der Implementierung des Demeter-Gesetzes
Nach meinem Verständnis sollten wir kleine Methoden in jeder Klasse haben, die Operationen auf dem Feld, das sie in ihnen eher haben, dass Außenwelt die Felder extrahieren und die Methoden aufrufen. Auch ich verstehe, dass wir Visitor pattern
verwenden können, um dies zu erreichen. Aber dann lese ich Adapter ist auch eine Möglichkeit, dies zu implementieren, die ich nicht verstehen konnte.
Adapter hat lediglich die Aufgabe Adaptee
Klasse darin und implementiert die interface
eines anderen Systems (beide Adaptee
und die interface
in kompatibel zu jedem anderen-wird). Es verwendet Delegierung, um Methode auf Adaptee
aufzurufen. Hier naht nicht, um verletzt zu werden, aber ich kann nicht sehen, wenn wir Adaptermuster dann nicht verwendet hätten, wie das Gesetz gebrochen wurde?
Die Referenz ich aus ist entnahm Website: http://c2.com/cgi/wiki/LawOfDemeter?LawOfDemeter
ObjectQueries? und das AdapterPattern sind zwei Möglichkeiten, das LawOfDemeter zu implementieren. - DaveOrme
Erweitern Sie, was Sie geschrieben haben: Das Adaptermuster wurde lose interpretiert. * Wrapper-Methoden * sind eine Lösung für Code, der LoD nicht berücksichtigt. Objektadapter können als Wrapper * gesehen * werden, da sie eine öffentliche Methode in eine andere Reihe von gekapselten Methoden konvertieren. Eine Façade könnte dasselbe tun, da es sich nur um Delegation (oder Indirektion) handelt. Wenn Sie jedoch die polymorphen Aufrufe des GoF-Adaptermusters als Teil seiner Essenz betrachten (http://stackoverflow.com/a/13323703/1168342), dann ist der Objektadapter keine Einstiegslösung für Code, der das nicht tut Respekt LoD. – Fuhrmanator