ファクトリ モードは、最も一般的に使用されるインスタンス化オブジェクト モードであり、ファクトリ メソッドを使用して新しい操作を置き換えるモードです。ファクトリ パターンには、一般原則に従って Factory という名前の静的メソッドであるキー構成があります。ただし、これは単なる原則です。ファクトリ メソッドの名前は任意に付けることができますが、この静的メソッドは任意のデータのパラメータも受け入れることができ、返される必要がありますオブジェクト。
ファクトリ パターンは、最も一般的に使用されるインスタンス化オブジェクト パターンです。これは、ファクトリ メソッドを使用して新しい操作を置き換えるパターンです。有名な Jive で広く使用されています。ファクトリ パターンは、Java プログラム システムのあらゆる場所で見ることができます。
ファクトリ パターンは、インスタンス オブジェクトを作成する場合の new と同等であるため、A a=new A() など、クラス Class に基づいてインスタンス オブジェクトを生成することがよくあります。ファクトリ パターンは、インスタンス オブジェクトの作成にも使用されます。したがって、将来的に新規の場合は、ファクトリー モードの使用を検討できるかどうか注意して検討する必要があります。そうすることでより多くの作業が必要になる可能性がありますが、システムの拡張性が向上し、必要な変更は最小限に抑えられます。
ファクトリーパターンとは何ですか?ファクトリ パターン定義
Sample クラスを例として、Sample のインスタンス オブジェクトを作成する場合:
Sample sample=new Sample();
ただし、実際には通常、サンプル インスタンス データベースにクエリを実行するための値の割り当てなど、いくつかの初期化作業を実行します。
まず最初に、Sample のコンストラクターを使用して、生成されたインスタンスが次のように記述できることを考えます。
Sample sample=new Sample(参数);
ただし、インスタンスの作成時に初期化作業が行われた場合、サンプルインスタンスは代入ほど単純ではない 長いコードになる可能性があり、それをコンストラクタにも記述すると、コードが醜くなります(リファクタリングが必要になります)。
なぜコードが醜いと言われているのか? 初心者にはそう思われないかもしれませんが、私たちの分析では次のようになります. 初期化作業が長いコードであれば、それは多くの作業が必要であることを意味します完了しました。多くの作業を 1 つのメソッドに詰め込むのは非常に困難です。多くの卵を 1 つのかごに入れるのは非常に危険です。これは Java のオブジェクト指向の原則にも反します。オブジェクト指向のカプセル化 (Encapsulation) とディスパッチ (委任) は、次のように指示します。長いコードの割り当てを可能な限り各セグメントに「カット」し、各セグメントを「カプセル化」することで (セグメント間の結合や接続を減らすため)、このようにしてリスクが分散されます。 、各セグメントを変更するだけで、もう不穏な事件は発生しません。
この例では、まず、インスタンスを作成する作業とインスタンスを使用する作業を分離する必要があります。つまり、サンプルからインスタンスを作成するために必要な大量の初期化作業を分離する必要があります。コンストラクタ。
現時点では、オブジェクトを生成するにはファクトリー モードが必要であり、上記の単純な新しいサンプル (パラメーター) は使用できなくなります。また、Sample が MySample のような継承を持つ場合、インターフェース指向プログラミングに従って、Sample をインターフェースに抽象化する必要があります。Sample はインターフェースであり、MySample と HisSample という 2 つのサブクラスがあります。これらをインスタンス化したい場合は、次のようになります。
ISample mysample=new MySample(); ISample hissample=new HisSample();
プロジェクトが進行するにつれて、Sample は「多くの息子を生み出す」可能性があるため、これらの息子を 1 つずつインスタンス化する必要があります。さらに悪いことに、前のコードを変更しなければならない場合があります。息子は後で追加してください。例: これは従来のプログラムでは避けられない問題です。
しかし、最初から意識してファクトリー パターンを使用すれば、これらの問題はなくなります。
以上がファクトリーパターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。