1

申し訳ありませんが、この特定のシナリオで質問が見つかりませんでした:このシナリオで抽象ファクトリを持つファクトリが必要ですか?

ステータスとタイプのエンティティがあります。それぞれのステータスとタイプごとに、ユーザーに別のページを表示する必要があります。このページは作成するための複雑なものであり、ビルダーパターンで作成されます。しかし、場合によっては、これらのページが同じである可能性があります。状況によっては、タイプを確認する必要はありません。起こり得る

いくつかの例: - >ページ "1" タイプAと

  • ステータス2 - >ページ "2A" タイプBと
  • ステータス2

    • ステータス1を任意のタイプの - >ページ "2B"
    • タイプAと状態3 - >ページ "3X" タイプBと
    • ステータス3 - >ページ "3X" タイプCと
    • ステータス3 - >ページ "3C"

    抽象的なファクトリ(各タイプのファクトリ)の結果を作成して返すファクトリ(各ステータスごとにスイッチケースを持つ)を実装することを考えました。しかし、私はこれらの工場の間の "同じページ"の問題を解決するためにいくつかの抽象クラスが必要になります。

    本当にこの複雑な構造が必要ですか?

  • 答えて

    0

    [種類]で異なるステータスに基づいてページを表示するとします。内部ページの呼び出しは、コンテキストに基づいて変更されます。だから、戦略デザインパターンでこの動作を実装することをお勧めします。

    問題文の私の理解あたりとしてC#でのコードの実装の下

    public interface ISomeOperation 
    { 
        string DisplayPage(int status); 
    } 
    
    public class Type : ISomeOperation 
    { 
        public string DisplayPage(int status) 
        { 
         if (status == 1) 
          return "1"; 
         return string.Empty; 
        } 
    } 
    
    public class TypeA : ISomeOperation 
    { 
        public string DisplayPage(int status) 
        { 
         if (status == 2) 
          return "2A"; 
         if (status == 3) 
          return "3A"; 
         if (status == 4) 
          return "4A"; 
         return string.Empty; 
        } 
    } 
    
    public class TypeB: ISomeOperation 
    { 
        public string DisplayPage(int status) 
        { 
         if (status == 2) 
          return "2B"; 
         if (status == 3) 
          return "3B"; 
         if (status == 4) 
          return "4B"; 
         return string.Empty; 
        } 
    } 
    
    public class TypeC : ISomeOperation 
    { 
        public string DisplayPage(int status) 
        { 
         if (status == 2) 
          return "2C"; 
         if (status == 3) 
          return "3C"; 
         if (status == 4) 
          return "4C"; 
         return string.Empty; 
        } 
    } 
    
    public class OperationContext 
    { 
        private readonly ISomeOperation _iSomeOperation; 
    
        public OperationContext(ISomeOperation someOperation) 
        { 
         _iSomeOperation = someOperation; 
        } 
    
        public string DisplayPageResult(int status) 
        { 
         return _iSomeOperation.DisplayPage(status); 
        } 
    } 
    

    ドライバコード:

    class Program 
    { 
        static void Main(string[] args) 
        { 
         var operationContext = new OperationContext(new Type()); 
         operationContext.DisplayPageResult(1); 
    
         operationContext = new OperationContext(new TypeB()); 
         operationContext.DisplayPageResult(2); 
         operationContext.DisplayPageResult(3); 
         operationContext.DisplayPageResult(4); 
    
         operationContext = new OperationContext(new TypeC()); 
         operationContext.DisplayPageResult(2); 
         operationContext.DisplayPageResult(3); 
         operationContext.DisplayPageResult(4); 
        } 
    } 
    
    +1

    ありがとう、これは私の問題を解決しました! –

    0

    あなたの問題文の要件は、それゆえ戦略ページの作成になりそうですがうまく収まらない場合があります(状態変更のないアルゴリズムファミリ)。ページのタイプが有限である場合、static Factoryまたはプロトタイプ(各ページインスタンスをクローンする必要がある場合)は、(選択のための2つのキーを使用して)よりよく適合します。

    関連する問題