再利用できるように手直ししているJavaコードがかなりあります。問題は、プロジェクト固有の部分が多く、アプリケーションプロジェクトとコードベースプロジェクト間の結合のレベルが高くなることです。
抽象メソッドの使用を実装するクラスを使用して子クラスからリソースを取得する以下の状況と、インスタンス変数を宣言するだけの状況と比較してください。
抽象メソッド:
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();
}
}
インスタンス変数:
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();
}
}
トレードオフはありますか?抽象メソッドの状況は行き過ぎですか、それとも抽象クラスが作成されたのですか?