Zacznijmy Wikipedia:Co to jest prawo Demeter?
Bardziej formalnie, Prawo Demeter dla funkcji wymaga, aby metoda m obiektu O może powoływać się tylko metody następujących rodzajów obiektów:
- sama O
- parametrów m
- Wszystkie obiekty utworzone/wystąpienia wewnątrz m
bezpośredni komponent- O za obiekty
- zmienną globalną, dostępną przez O, w zakresie m
Zasada 1:
public class ClassOne {
public void method1() {
method2();
}
public void method2() {
}
}
Zasada 2:
public class ClassOne {
public void method1(ClassTwo classTwo) {
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Reguła 3:
public class ClassOne {
public void method1() {
ClassTwo classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Zasada 4 (dzięki @juharr):
public class ClassOne {
private ClassTwo classTwo;
public void method1() {
classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Zasada 5:
?
Czy ktoś może mi pomóc z reguły 5?
A czy prawo Demeter nie sugeruje, że łańcuchy są złe?
User.getName().getLastName();
Prowadzi to do wysokiego sprzężenia.
Czy nie "powiedz, nie pytaj" o podobną zasadę?
Czy to wszystko? Czy myliłem się co do czegoś? Jak możesz przestrzegać Prawa Demeter?
Tak, w zasadzie "demeter" można przeczytać, aby powiedzieć: łańcuchowanie jest złe. Nie dostaniesz czegoś, aby coś z tego zrobić, żeby zrobić coś na ostatnią rzecz. – GhostCat
Reguła 4 jest taka, że 'ClassOne' ma prywatne pole (komponent) typu' ClassTwo', wtedy możesz wywołać metody na tym polu ze swojej metody w 'ClassOne'. – juharr
@juharr Dzięki! – Anonymous