かなり多数のサブクラス(車、自転車など)を持つクラス(乗り物としましょう)があります。すべてのサブクラスには、サブクラスのタイプ (タイヤの数など) に関する特定の情報が格納されます。
このすべての情報が (コンパイル時に) 既に適用されていることを確認したいと思います。したがって、サブクラスのコンストラクターでこのデータを指定したくありません (それらのいくつかを設定するのを忘れる可能性があるため)。この情報を Vehicle のコンストラクターに入れることもできますが、これらのパラメーターが多数あるため、コードがかなり乱雑になります。
public class Vehicle {
int numberOfTires;
public Vehicle(int numberOfTires, ...) {
...
}
}
public class Bike {
public Bike() {
super(2,...);
...
}
}
完全に読み取り不能なコンストラクターになってしまいます。サブクラスに固有の情報であっても、インスタンスごとにこの情報を保存します。
別の方法は、抽象静的ゲッター/セッターを導入し、サブクラスに情報を保存することです。
public class Vehicle {
...
abstract public int getNumberOfTires();
}
public class Bike {
static int numberofTires = 2;
...
public int getNumberOfTires() {
return numberOfTires;
}
}
これはかなりきれいに見え、インスタンスごとではなくサブクラスごとに情報を保存しますが、サブクラスには多くのコードの重複があります。現在、すべてのサブクラスには ~20 個のセッター/ゲッターが含まれていますが、実際の機能はほとんどありません。これを回避するきれいな方法はありますか?おそらくFactoryメソッドなどを使用していますか?