Questa è la mia situazione:
Ho una classe chiamata CueList, che è fondamentalmente un wrapper attorno ad ArrayList. Ho un'altra classe chiamata TimeTicker
che allerta tutti i Tickable
(interfaccia) nella sua lista che è passato un certo periodo di tempo. Poiché ho bisogno di spuntare tutti gli elementi in CueList
, ma non voglio violare DRY mantenendo una copia di tutti gli elementi di CueList nella classe TimeTickable
(il che farebbe un incubo quando voglio per eliminare una Cue), il mio istinto immediato era di rendere CueList
a Tickable
e farlo passare il messaggio "tick" a tutti i suoi elementi.
Questo sembra violare il principio di Responsabilità Unica, che afferma che CueList
non dovrebbe preoccuparsi di tenere traccia di tutti i segnali E di ticchettarli.
Quindi quello che ho fatto è stato creare una classe CueManager
che è essa stessa Tickable e collega tutto (e spunta tutti gli elementi di CueList).
Ma ora, a causa della legge di demeter, ho un sacco di metodi duplicati in CueManager
che rispecchiano solo la TimeTicker
e la CueList
class.
Questo non significa che la classe CueManager
abbia più motivi per cambiare? Ciò non significa che viola il principio di responsabilità unica.
Inoltre, poiché la maggior parte dei metodi di CueManager mirror TimeTicker e CueList, non significa in realtà che sia un TimeTicker e CueList. Quindi non dovrebbe esserlo INHERIT da CueList e TimeTicker! (Ovviamente non puoi fare ereditarietà multiple in Java, ma ho l'impressione che abbia senso avere Eredita da CueList, ma che poi violerebbe la Single Responsibility)
Quindi in sintesi:
La legge di Demeter mi fa fare un mucchio di metodi che alterano altre due classi, ma questo mi fa pensare che dovrebbe davvero ereditare da entrambe le classi, ma ciò significherebbe che una classe gestisce più responsabilità ( anche se è attraverso la sua superclasse).