さて、ストラテジーファクトリーとデザインファクトリーの両方のパターンを使用するように求められました。問題は次のとおりです。ストラテジーデザインパターンでファクトリーを使用
ローンの処理に使用する銀行のアプリケーションを開発しています。メソッドcapital()
を持つLoan
クラスがあります。 capital()
メソッドには、Loanオブジェクトインスタンスの属性のいくつかをチェックし、属性に基づいて適切な戦略をローンタイプに使用する醜いif-then-else条件が含まれています。ここでcapital()
メソッドの擬似コードは次のとおりです。
capital() {
if (expiry == null && maturity != null) {
// Find capital for term loan
return commitment * duration * riskFactor;
}
if (expiry != null && maturity == null) {
if (getUnusedPercentage() != 1.0) {
// Find capital for revolving loan
return commitment * unusedPercentage * duration * riskFactor;
} else {
// Find capital for complex loan
return (outstandingRiskAmount * duration * riskFactor) + (unusedRiskAmount * duration * unusedRiskFactor);
}
}
}
私たちは、この設計にStrategyパターンを紹介したいと思います。適切なStrategyオブジェクトを作成するファクトリを作成します。ファクトリをシングルトンクラスにします。 UMLダイアグラムを描画し、capital()
メソッドを置き換えるためにコードスニペットを記述します。覚えておいてください:戦略の使用に関する重要なこと:クライアントはコンテキストオブジェクトを提供する必要があります。
私はUML図を作成しました。私はシングルトンの理解にかなり固執しているので、私はそれを得たと思う。私は戦略をかなりよく理解していると思う。しかし、私は、ストラテジーオブジェクトを作成するファクトリでのセットアップがこれを実行する最善の方法であると自信を持って納得しています。 Check out my diagram here。私は、Loanをコンテキストオブジェクトとして使用して、Loanを作成するクライアントオブジェクトを書くことを計画しています(工場でLoanコンストラクタを作成して適切な戦略で初期化します)。 capital()
メソッドは、設定された戦略を実行するだけです。私の理解が正しいとすれば、私が工場をここに設定している方法は、間接費の層を追加することによって、戦略からローン(コンテキスト)を完全に切り離すことに役立っています。
私が確信していることの1つは、元の資本方式内で起こった計算中に使用されたデータを取得する方法です。いくつかの戦略では、いくつかのパラメータが使用されます(コミットメント、期間、riskFactorのみが使用されますが、複雑なローンはローンのすべての利用可能な属性を使用します)。 calculateCapital()
メソッドは、すべての戦略によって実装され、6つの属性をすべてパラメータとして持つ必要がありますか?
よりよい結果を得るために、戦略パターンでFactoryを使用するより良い方法はありますか?代わりに、AbstractFactoryメソッドまたはFactoryメソッドを使用する必要がありますか?ここで
そして質問は...でしょうか? – Isaac
と関連している可能性があります:http://stackoverflow.com/questions/5375187/strategy-design-pattern-and-factory-method-design-patternまた:http://www.codeproject。com/Articles/9942/Refactoring-to-Patterns-Factory-and-Strategy-Patteおよびhttp://social.msdn.microsoft.com/Forums/is/architecturegeneral/thread/8218054d-969c-4066-ba05-24553f890465 –