Ich habe eine Frage über OOP-Implementierung und Entwurfsmuster.Welches Designmuster wird verwendet (falls vorhanden)?
Ich habe ein festes Klassenmodell, das ich nicht ändern kann (weil es bei jedem Start der Anwendung automatisch generiert wird). Es gibt viele Klassen mit Gleichfeldern wie im folgenden Beispiel: Wie Sie sehen können, sind die Felder city
und streets
in beiden Klassen enthalten.
public class A{
String city;
String street;
String name;
....//get methods
}
public class B{
String city;
String street;
String age;
....//get methods
}
Ich brauche eine Adresse zu extrahieren, die beiden Arten von Klassen bilden und ich möchte es mit einem Verfahren implementieren (weil es zu sein scheint dumm zweimal den gleichen Code zu schreiben). Wenn das Klassenmodell veränderbar wäre, könnte ich eine neue Schnittstelle Addressable
hinzufügen, die A
und B
implementieren könnte.
public interface Addressable{
public String getStreet();
public String getCity();
}
//somewhere in code
public Address getAddress(Addressable addressable){
return new Address(addressable.getCity(), addressable.getStreet());
}
Was ist der eleganteste Weg, das gleiche ohne Schnittstelle zu implementieren und ohne dasselbe für verschiedene Klassen zu programmieren?
Es ist nicht klar, was Sie tatsächlich in A und B ändern können. – davidxxx
Es gibt keine elegante Möglichkeit, Sie können einfach versuchen, in die entsprechende Klasse zu werfen, oder Reflexion (möglicherweise zu schwer für diese Notwendigkeit). –
Wenn die Klassen nicht geändert werden können (wenn sie erzeugt werden, die zwar möglich sind) und Sie keine Wrapper/Decorators für die Klassen erzeugen können, die eine gemeinsame Schnittstelle implementieren, wäre die einzige andere Art, die ich sehen würde, eine Reflektion. Aber bevor ich auf diese Route gehe, denke ich darüber nach, was ohne Nachdenken getan werden könnte. Eine Möglichkeit, diese Wrapper zu generieren (oder zumindest zu füllen), könnte [mapsstruct] (http://mapstruct.org/) sein. – Thomas