Dies ist das SzenarioGängige Praxis der Problemumgehung zu erweitern 2 Klassen in Java
interface BaseMsg
interface SpecialMsg
class FooBaseMsg implements BaseMsg
class FooSpecialMsg extends FooBaseMsg implements SpecialMsg
// The above classes are written by another team, and cannot be modified.
class BarBaseMsg implements BaseMsg // totally different way to implement
class BarSpecialMsg // this is the question
Methoden zum SpecialMsg
in FooSpecialMsg
implementiert ist völlig gleich wie in BarSpecialMsg
.
So ist es wirklich schlechte Praxis copy-paste die Implementierungen
Aber Methoden für BaseMsg
unterscheidet.
Mein aktueller Ansatz ist
class BarSpecialMsg extends BarBaseMsg implements SpecialMsg
private FooSpecialMsg foo;
// constructors will have super(), and initialize FooSpecialMsg
// implements methods from SpecialMsg by calling
// foo.methods()
Ist dies der richtige Weg, es zu tun? Was sind die Standards für diese Art von Problem?
Gibt es eine Art Designmuster, um dem entgegenzuwirken?
Die Abwärtsseite des aktuellen Ansatzes ist, dass die Daten dupliziert werden, da sie Ressourcen für 2 Objekte für jede Nutzung
Je nachdem, wie man es betrachtet, haben Sie eine 'Decorator 'oder ein' Adapter'-Muster, das mit Composition implementiert wurde. Dieser Ansatz ist völlig in Ordnung. – KevinO
Wenn Sie nicht erweitern können, dekorieren. Das ist also richtig, IMO. –