5

さて、ストラテジーファクトリーとデザインファクトリーの両方のパターンを使用するように求められました。問題は次のとおりです。ストラテジーデザインパターンでファクトリーを使用

ローンの処理に使用する銀行のアプリケーションを開発しています。メソッド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メソッドを使用する必要がありますか?ここで

+0

そして質問は...でしょうか? – Isaac

+0

と関連している可能性があります: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 –

答えて

10

は、この質問の私の解釈と私の答えです:

工場は、適切な戦略を作成する必要があります。これは、ローンのプロパティについて知っている場合にのみ実行できます。したがって、工場はあなたが好む任意の注入方法でローンを与えられなければなりません。そしてローンの特性を使って返済する戦略を決定しなければなりません。

これで、ローンのタイプに適した戦略ができました。資本を計算する必要があります。ここでも、これはローンのプロパティに依存しています。したがって、戦略にはローンが必要です。これは、工場のコンストラクタを介して、またはcapital/calculateCapitalメソッドのパラメータを介して注入することができます。

これは、それを素敵でシンプルに、疎結合かつ抽象的に保ちます。

ような何か:

ICapitalStrategy s = LoanStrategyFactory.Create(loan); 
s.CalculateCapital(loan); 
関連する問題