Ich habe ziemlich viel Java-Code, den ich überarbeite, um ihn wiederzuverwenden. Das Problem ist, dass es viele Teile gibt, die projektspezifisch sind, so dass am Ende eine höhere Kopplungsstufe zwischen dem Anwendungsprojekt und dem Codebasisprojekt besteht.
Vergleichen Sie die folgenden Situationen, in denen wir eine Klasse verwenden, die die Verwendung abstrakter Methoden implementiert, um die Ressourcen aus der untergeordneten Klasse herauszuholen, und eine, in der wir einfach Instanzvariablen deklarieren.
Abstrakte Methoden:
public abstract class SuperBaseClass {
public abstract int getNumberOne();
public abstract String getStringOne();
public abstract String getStringTwo();
public printStuff() {
Log.i("IntAndTwoStrings", String.format("%i %s and %s",
getNumberOne(), getStringOne(), getStringTwo()));
}
}
public class ReusedAppClass extends SuperBaseClass {
public int getNumberOne() {
return 1;
}
public String getStringOne() {
return "String1";
}
public String getStringTwo() {
return "String2";
}
public ReusedAppClass() {
printStuff();
}
}
Instanzvariablen:
public class SuperBaseClass {
protected int numberOne;
protected String stringOne;
protected String stringTwo;
public printStuff() {
//Possibly throw RuntimeExceptions if the app didnt set these
Log.i("IntAndTwoStrings", String.format("%i %s and %s",
numberOne, stringOne, stringTwo));
}
}
public class ReusedAppClass extends SuperBaseClass {
public ReusedAppClass() {
numberOne = 1;
stringOne = "String1";
stringTwo = "String2";
printStuff();
}
}
Gibt es einen Kompromiss? Ist die Situation mit abstrakten Methoden übertrieben, oder wurden dafür abstrakte Klassen erstellt?