同様のシナリオで Stackoverflow に関するいくつかの質問が既にありますが、実際には私のケースには対応していません。私は現在、いくつかのリファクタリングを行っており、パターンを適用することで、コードをより堅牢で柔軟で読みやすくしたいと考えています。タスクは次のとおりです。
クラス A としましょう。これは、メンバーの 1 つを設定するときにいくつかのロジックを適用します。このロジックは変わりやすいので、外部化したいと思います。これは、戦略パターンが役立つ場所です。また、ある段階で、クラス A のオブジェクトのリストをフィルター処理する必要があります。フィルター ロジックも構成可能である必要があるため、このタスクでも戦略パターンが役立ちます。問題は、これらの要件をオブジェクト指向設計に組み込むにはどうすればよいかということです。
これまでの私の考え: - SettingMemberStrategy と FilterStrategy の 2 つの戦略オブジェクトを持つ、タイプ A のオブジェクトのファクトリを使用します。具体的なファクトリがシングルトンとして実装されている場合、オブジェクトを作成する前に 2 つの戦略オブジェクトを指定する必要があります。- クラス A のインターフェイスに次の 2 つのメソッドがあります: setMember(value); ブール値のfiltered()。これらのメソッドの正確な実装は、戦略によって決定されます。しかし、オブジェクトは戦略のインスタンスも保持する必要がありますか?
このアプローチは機能する可能性がありますが、タスクに対して少し過剰に設計されており、見た目も美しくありません。誰かがより良い解決策を示唆できますか? どうもありがとう。
乾杯、
マーティン
public interface IA {
setMember();
filter();
}
public class A implements IA {
private String theMember = "";
getMember() { return this.theMember; }
setMember(String input, otherParameters[]) {
// set value for member based on strategy and parameters
}
boolean filter();
// returns yes/no based on whether this class should be filtered
// as per filter strategy
}
public class myFactory {
private FilterStrategy myFilterStrategy;
private MemberStrategy mySetMemberStrategy;
IA createObjectOfClassA() {
a = new A(mySetMemberStrategy, myFilterStrategy);
}
setFilterStrategy(FilterStrategy s) { this.myFilterStrategy = s }
setMemberStrategy(MemberStrategy s) { this.mySetMemberStrategy = s }
}