Lassen Sie uns mit Wikipedia starten:Was ist Demeter-Gesetz?
formal Mehr verlangt das Gesetz von Demeter für Funktionen, dass ein Verfahren m eines Objekts O nur die Methoden der folgenden Arten von Objekten aufrufen können:
- O selbst
- m-Parameter
- Alle Objekte erstellt/in m instanziiert
- O direkte Komponente Objekte
- eine globale Variable, mit dem O, im Rahmen von m
Regel 1:
public class ClassOne {
public void method1() {
method2();
}
public void method2() {
}
}
Regel 2:
public class ClassOne {
public void method1(ClassTwo classTwo) {
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Regel 3:
public class ClassOne {
public void method1() {
ClassTwo classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Regel 4 (dank @juharr):
public class ClassOne {
private ClassTwo classTwo;
public void method1() {
classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Regel 5:
?
mir jemand mit Regel 5 helfen?
Und impliziert das Gesetz von Demeter, dass die Verkettung schlecht ist?
User.getName().getLastName();
Dies führt zu einer hohen Kopplung.
Ist nicht "Sag, frag nicht" ein ähnliches Prinzip?
Also ist das alles? Habe ich etwas falsch? Wie können Sie Demeter-Gesetz befolgen?
Ja, im Grunde "Demeter" kann gelesen werden, um zu sagen: Verkettung ist schlecht. Du bekommst nichts, um etwas daraus zu machen, etwas in der letzten Sache zu tun. – GhostCat
Regel 4 ist, wenn 'ClassOne' ein privates Feld (Komponente) vom Typ' ClassTwo' hat, dann können Sie Methoden für dieses Feld von Ihrer Methode in 'ClassOne' aufrufen. – juharr
@juharr Danke! – Anonymous