Frage Java Mehrfache Vererbung, entfernen Sie doppelten Code


Es gibt Bibliotheksklassen B und C, beide erben von Klasse A. Ich habe 2 Klassen, die B & C erweitern, nämlich MyB & MyC.

    A
   / \    
  B   C 
 /     \
MyB   MyC

MyB & MyC teilen viele gemeinsame code und sie sind nur geringfügig anders.

Ich möchte doppelten Code loswerden, wie kann ich das in Java machen? In C ++ wäre es möglich, eine gemeinsame Basisklasse zu erstellen und alles, was darin üblich ist, wie folgt zu setzen:

    A
   / \  
  B   C 
   \ /
  MyBase
   / \
 MyB MyC

8
2017-07-24 16:07


Ursprung


Antworten:


Du könntest benutzen Zusammensetzung:

  • Erstellen Sie eine neue Klasse MyCommon mit dem gemeinsamen Code
  • Fügen Sie in MyB und MyC eine Instanz von MyCommon hinzu und delegieren Sie die Arbeit an MyCommon.

25
2017-07-24 16:08



Anstatt all Ihre Logik in diesen Klassen zu haben, haben Sie alle allgemeine Logik in der Klasse D. Mach es jetzt so MyC und MyB Jeder hat ein Mitglied, das eine Instanz von D. Das heißt Zusammensetzung.


3
2017-07-24 16:09



Eine Klasse kann nur von einer Klasse ausgehen. Sie können jedoch mehrere Schnittstellen implementieren.


1
2017-07-24 16:09



In Java werden Sie etwas wie folgt verwenden:

  1. Komposition (Muster) zum Einkapseln von Instanzen von B und C "im" MyBase.

  2. Refaktor B und C (wenn nötig) um eine separate Schnittstelle freizulegen IB und IC

  3. MyBase um mehrere Schnittstellen zu implementieren: IB und IC, indem Sie "das Richtige tun", um Methoden auf der Schnittstelle zu intern abzubilden B und C Instanzen.

  4. MyB und MyC um eine geeignete Schnittstelle zu implementieren und Aufrufe an zu mappen MyBase.


1
2017-07-24 16:11