0

私はファクトリ デザイン パターンについてさらに学習していて、Microsoft の次の例に出くわしました (Java で再コーディングしました)。例はこちら

短縮版:

  • 抽象製品クラス

  • Product を拡張する具象 Product クラス

  • 抽象 Factory クラス

  • Factory を拡張する Concrete Factory クラス

  • アセンブリ クラス

    public class ProductAssembler {
    
    public void AssembleProduct(Factory factory)
    {
    Product p = factory.getProduct();
    //do something
    }
    }
    
  • クライアント

    public static void main(String[] args)
    {
    Factory factory = new ConcreteFactory();
    new ProductAssembler().AssembleProduct(factory);
    }
    

質問:

  • 製品オブジェクトの代わりにメイン メソッドでファクトリ オブジェクトを作成する目的は何ですか? 製品オブジェクトを assembleproduct メソッドに渡して、そのメソッドを変更して、ファクトリの代わりに製品を受け入れるようにしないのはなぜですか?
  • アセンブリ クラスも「クライアント」の一部ですか?

ありがとう

4

1 に答える 1

1

assembleProduct()inProductAssemblerは、製品のインスタンス化を扱いたくありません。そのため、これを Factory に委譲して、新しい種類の製品が導入されたときに、既存の factory が変更されます (または新しい factory が追加されます) がProductAssembler、変更する必要はありません。インスタンス化の代わりに、 をassembleProduct()呼び出しますfactory.getProduct()

Factory パターンに関する限り、ProductAssemblerそれはクライアントです。しかし、アプリケーションの観点から見ると、あなたmain()はクライアントであるため、製品オブジェクトを扱いません。

于 2013-01-23T08:11:05.590 に答える