デザイン パターン (デザイン パターン)
デザイン パターン (デザイン パターン) は、ほとんどの人に知られている、繰り返し使用されるコード設計エクスペリエンスを分類およびカタログ化した一連の概要です。デザイン パターンを使用する目的は、コードを再利用し、コードを他の人が理解しやすくし、コードの信頼性を確保することです。デザイン パターンが自分自身、他者、システムにとって Win-Win であることは疑いの余地がありません。デザイン パターンによってコーディングが真のエンジニアリングになります。デザイン パターンは、建物の構造と同じようにソフトウェア エンジニアリングの基礎です。
なぜデザイン パターンを提唱する必要があるのでしょうか?
基本的な理由は、コードを再利用して保守性を向上させることです。
では、コードの再利用を実現するにはどうすればよいでしょうか?オブジェクト指向の原則には、オープン クローズド原則 (OCP)、リスコフ置換原則 (LSP)、依存性反転原則 (DIP)、インターフェイス分離原則、ISP)、複合/集合体再利用原則 (CARP)、最小知識の原則 ( PLK、デメテルの法則とも呼ばれます)。開閉の原理は理想的なものであり、オブジェクト指向設計の究極の目標です。開閉原則の実装方法としては、他にもいくつかの項目が考えられます。
デザイン パターンはこれらの原則を実装して、コードの再利用を実現し、保守性を高めます。
23 パターン
デザイン パターンは 3 種類、合計 23 種類に分かれています。
Abstract Factory
(Abstractファクトリ パターン): 具体的なクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供します。
Adapter
(アダプター パターン): クラスのインターフェイスを顧客が必要とする別のインターフェイスに変換します。アダプター パターンを使用すると、インターフェイスに互換性がないために連携できないクラスが連携できるようになります。
ブリッジ
(ブリッジ モード): 抽象部分を実装部分から分離して、独立して変更できるようにします。
Builder
(ビルダー パターン): 複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。
責任の連鎖
(責任の連鎖パターン): リクエストの送信者と受信者を切り離し、複数のオブジェクトがリクエストを処理できるようにします。これらのオブジェクトはチェーンに接続され、リクエストはオブジェクトが処理するまでチェーンに沿って渡されます。
Command
(コマンド モード): リクエストをオブジェクトとしてカプセル化し、さまざまなリクエストでクライアントをパラメータ化できるようにし、リクエストをキューまたはログに記録し、オプションのキャンセル操作をサポートします。
Composite
(合成モード): オブジェクトをツリー構造に結合して、「部分全体」の階層を表します。これにより、クライアントは単一オブジェクトと複合オブジェクトを一貫して使用できるようになります。
Decorator
(装飾モード): 追加の責任をオブジェクトに動的に追加します。拡張機能の点では、サブクラス化よりも柔軟性があります。
Facade
(外観モード): サブシステム内の一連のインターフェイスに一貫したインターフェイスを提供します。ファサード モードは、このサブシステムを使いやすくする高レベルのインターフェイスを定義します。
ファクトリ メソッド
(ファクトリ パターン): オブジェクトを作成するためのインターフェイスを定義し、どのクラスをインスタンス化するかをサブクラスに決定させます。ファクトリ メソッドは、クラスのインスタンス化をそのサブクラスに延期します。
Flyweight
(フライウェイト モード): 共有テクノロジを使用して、多数のきめの細かいオブジェクトを効果的にサポートします。
インタープリター
(パーサー モード): 与えられた言語で、その文法の表現を定義し、その表現を使用して言語文を解釈するインタープリターを定義します。
Iterator
(イテレータ パターン): オブジェクトの内部表現を公開せずに、集約オブジェクト内の各要素に順次アクセスするメソッドを提供します。
Mediator
(メディエーター モード): メディエーター オブジェクトを使用して、一連のオブジェクト インタラクションをカプセル化します。メディエーターにより、オブジェクトが相互に明示的に参照する必要がなくなるため、オブジェクトは疎結合になり、相互作用を独立して変更できます。
Memento
(メモ モード): カプセル化を破壊することなく、オブジェクトの内部状態をキャプチャし、この状態をオブジェクトの外部に保存します。これにより、後でオブジェクトを保存された状態に復元できます。
Observer
(オブザーバー パターン): オブジェクト間の 1 対多の依存関係を定義して、オブジェクトの状態が変化したときに、それに依存するすべてのオブジェクトが通知を受け取り、自動的にリフレッシュします。
Prototype
(プロトタイプ モード): プロトタイプ インスタンスを使用して、作成するオブジェクトのタイプを指定し、このプロトタイプをコピーして新しいオブジェクトを作成します。
Proxy
(プロキシ モード): このオブジェクトへのアクセスを制御するために、他のオブジェクトにプロキシを提供します。
Singleton
(シングルトン モード): クラスにインスタンスが 1 つだけあることを確認し、そのインスタンスにアクセスするためのグローバル アクセス ポイントを提供します。シングルトン パターンは最も単純な設計パターンの 1 つですが、Java 開発者にとっては多くの欠陥があります。 David Geary は 9 月のコラムで、シングルトン パターンと、マルチスレッド、クラス ローダー、シリアル化に直面した場合のその落とし穴に対処する方法について説明しています。
State
(状態モード): 内部状態が変化したときにオブジェクトの動作を変更できるようにします。オブジェクトは、それが属するクラスを変更したようです。
Strategy
(戦略パターン): 一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。このパターンにより、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。
テンプレート メソッド
(テンプレート メソッド パターン): 一部のステップをサブクラスに延期しながら、操作内のアルゴリズムのスケルトンを定義します。テンプレート メソッドを使用すると、アルゴリズムの構造を変更せずに、サブクラスがアルゴリズムの特定のステップを再定義できます。
Visitor
(ビジター モード): オブジェクト構造内の各要素に作用する操作を表します。これにより、クラスを変更せずに各要素に作用する新しい操作を定義できます。
以上がPHP デザイン パターンの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。