抽象クラスと具象クラスで構成された次のコードとアーキテクチャ (実際にはこれは非常に単純化されたバージョンです) があります。
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
問題は、新しく追加されたメソッド (ここでは 、、 )に提供されたデータにアクセスしたいということです。これらのパラメーターを知らない抽象クラスを呼び出しが流れると、この情報が失われます。このアーキテクチャを変更して、この情報を保持するにはどうすればよいですか?updateData
year
month
day
次の解決策が思い浮かびましたが、すべて明らかな欠点があります。
- 抽象メソッドに URL を指定し、そこからパラメーターを再度抽出します。(問題: メソッドでのみ必要で
procecssData
、URL では不要なパラメーターは何ですか?) updateDataFromUrl
メソッドを 2 つの 2 つのメソッド (呼び出し前の部分と呼び出し後の部分) に分割しprocessData
ます。これらのメソッドを ConcreteProcessor で直接使用します。(問題:updateDataFromUrl
メソッドには、呼び出しの前後に必要なコンテキストがたくさんありますprocessData
。新しく作成されたメソッド間でこのデータを転送するにはどうすればよいですか?)