基本的に、特定の条件が与えられたときにさまざまなアクションを実行する必要があります。既存のコードはこのように書かれています
基本インターフェース
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
最初のワーカークラスの実装
class DoItThisWay implements DoSomething {
...
}
2番目のワーカークラスの実装
class DoItThatWay implements DoSomething {
...
}
メインクラス
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
このコードは問題なく動作し、理解しやすいです。
ここで、新しい要件のために、にのみ意味のある新しい情報を渡す必要がありDoItThisWay
ます。
私の質問は、次のコーディングスタイルがこの要件を処理するのに適しているかどうかです。
新しいクラス変数とメソッドを使用する
// Use new class variable and method
class DoItThisWay implements DoSomething {
private int quality;
DoSomething() {
quality = 0;
}
public void setQuality(int quality) {
this.quality = quality;
};
public void letDoIt(String info) {
if (quality > 50) { // make use of the new information
...
} else {
...
}
} ;
}
このようにすると、呼び出し元に対応する変更を加える必要があります。
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
DoItThisWay tmp = new DoItThisWay();
tmp.setQuality(quality)
worker = tmp;
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
それは良いコーディングスタイルですか?それとも私はそれをキャストすることができます
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
worker = new DoItThisWay();
((DoItThisWay) worker).setQuality(quality)
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
DoItThisWay
とDoItThatWay
のコンストラクタに一度行われますMain
。Main
は長生きのクラスでdoingIt
あり、何度も何度も呼ばれています。
setQuality
存続期間中にメソッドが複数回呼び出されると言うつもりDoItThisWay
ですか?
quality
コンストラクタに渡さないのDoItThisWay
ですか?