抽象クラスと具象クラスで構成された次のコードとアーキテクチャ (実際にはこれは非常に単純化されたバージョンです) があります。
public abstract class AbstractProcessor {
public void updateDataFromUrl(String url) {
//Download url
//Decrypt, and do a lot of stuff,
String data = "abc"; //Result from downloading
String processed = processData(data);
//Do a lot of other things with the transformed data
}
public abstract String processData(String data);
}
final class ConcreteProcessor extends AbstractProcessor {
public void updateData(int year, int month, int day) {
String url = String.format("http://%d.%d.%d", year, month, day);
updateDataFromUrl(url);
}
@Override
public String processData(String data) {
//Process the data
//---------------
//PROBLEM:
//----------------
//Need access to year, month, day ....
return null;
}
}
メソッドには、いくつかのプロセッサで再利用したいupdateDataFromUrl多くのコード (ブース、呼び出しの前後) が含まれています。このため、コードを抽象クラスに入れました。processData
問題は、新しく追加されたメソッド (ここでは 、、 )に提供されたデータにアクセスしたいということです。これらのパラメーターを知らない抽象クラスを呼び出しが流れると、この情報が失われます。このアーキテクチャを変更して、この情報を保持するにはどうすればよいですか?updateDatayearmonthday
次の解決策が思い浮かびましたが、すべて明らかな欠点があります。
- 抽象メソッドに URL を指定し、そこからパラメーターを再度抽出します。(問題: メソッドでのみ必要で
procecssData、URL では不要なパラメーターは何ですか?) updateDataFromUrlメソッドを 2 つの 2 つのメソッド (呼び出し前の部分と呼び出し後の部分) に分割しprocessDataます。これらのメソッドを ConcreteProcessor で直接使用します。(問題:updateDataFromUrlメソッドには、呼び出しの前後に必要なコンテキストがたくさんありますprocessData。新しく作成されたメソッド間でこのデータを転送するにはどうすればよいですか?)