デザインパターンのファクトリパターン

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して17日目です。クリックしてイベントの詳細をご覧ください

序章

ファクトリパターンは、オブジェクトをインスタンス化するために最も一般的に使用されるパターンであり、新しい操作をファクトリメソッドに置き換えるパターンです。有名なJiveフォーラムは、Javaプログラムシステムのいたるところに見られる多くのファクトリパターンを使用しています。ファクトリパターンは新しいインスタンスオブジェクトの作成と同等であるため、A a = new A()などのクラスクラスに従ってインスタンスオブジェクトを生成する必要があることがよくあります。ファクトリパターンはインスタンスオブジェクトの作成にも使用されるため、さらに多くのオブジェクトが必要になります。ファクトリパターンの使用を検討できるかどうかは、多少の作業が必要になる可能性がありますが、システムのスケーラビリティが向上し、変更の量が最小限に抑えられます。

正章

思考の質問具体的なクラスをインスタンス化するコードをアプリケーションから抽象化する、またはアプリケーションの他の部分に干渉しないようにカプセル化するにはどうすればよいですか?P111

  • 特定のクラスをインスタンス化するためのコードを管理用のオブジェクトに配置し、さまざまな入力パラメーターを使用して特定のクラスをインスタンス化することを決定します

Simple Factory
は、23のGOFデザインパターンの1つではなく、プログラミングイディオムのようなものです。P117

image.png

特徴

  • インスタンスは通常、静的メソッドを使用して作成されますが、継承によって作成されたメソッドの動作を変更する方法はありません。P115

欠点

  • オープンクローズの原則に違反して、製品を追加するときにファクトリクラスを変更する必要があります。

ファクトリメソッドパターン

オブジェクトを作成するためのインターフェースが定義されていますが、インスタンス化するクラスを決定するのはサブクラス次第です。P134

image.png

特徴

  • ファクトリメソッドを使用すると、クラスはインスタンス化をサブクラスに延期できます。P134
  • 「決定」とは、選択するサブクラスを指し、実際に作成されるサブクラスを決定します。P134
  • 製品を追加したり、製品の実装を変更したりしても、ファクトリインターフェイスには影響しません。P135

欠点

  • 新製品を追加する場合は、新しいファクトリを追加する必要があり、コードが複雑になります。

抽象ファクトリパターン
は、具象クラスを明示的に指定せずに、関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインターフェイスを提供します。P156

image.png

特徴

  • 抽象ファクトリのメソッドは、ファクトリメソッドとして実装されることがよくあります。P158
  • 関連商品のコレクション。P159

欠点

  • 新しい関連製品を追加する場合は、インターフェイスと実装クラスを変更する必要があります。P159

設計原則

  • 依存性逆転の原則:具体的なクラスではなく、抽象化に依存します。P139

高レベルのコンポーネントは低レベルのコンポーネントに依存することはできず、高レベルのコンポーネントと低レベルのコンポーネントの両方が抽象化に依存する必要があります。P139
の低レベルのコンポーネントは、高レベルの抽象化に依存しています。P141
依存性逆転の原則に違反しないようにするためのガイドライン(実際の状況に応じて従うことができます)P143
変数は具象クラスへの参照を保持できません。
つまり、具象クラスをインポートしない場合は、ファクトリを使用して具体的なクラス。具体的なクラス
から派生したクラスを作成しないでください。
[本の説明]具体的なクラスを使用する場合は、具体的なクラスに依存する可能性がありますが、クラスはインターフェイスまたは抽象クラスから派生させます。
[私自身の考え]具象クラスはインターフェースまたは抽象クラスから派生し、クラス
は基本クラスをオーバーライドせずに具象クラスから派生できます。実装されたメソッド:
[本の説明]基本クラスに実装されたメソッドは、すべてのサブクラスで共有する必要があります。
[My独自の考え]この本の前半で、基本クラスがデフォルトのメソッドを提供でき、サブクラスがそれらを独自のメソッドとしてオーバーライドできることも言及されています。P135\を実装する

あなたが思うこと

  • 実際、私が通常コードを書くときは、考え方を逆にすることがよくあります。たとえば、インターフェイスのさまざまな実装に依存してさまざまな小さな関数を完成させる場合、最初に特定の実装を書くのではなく、上位レベルのコードを完成させます。インターフェイスに応じたフレームワーク。次に、各実装クラスを詳細に完了します。
  • この本ではファクトリメソッドと抽象ファクトリの違いについて説明していますが、それでも両者の違いは大きくないと感じていますが、アプリケーションのシナリオでは少し異なります。ファクトリメソッドは製品のクラスの作成を指しますが、抽象ファクトリキーは複数のクラスの製品に関連しています。抽象ファクトリは、関連製品のクラスが1つしかない場合のファクトリメソッドです。

おすすめ

転載: juejin.im/post/7087872450439938061