C ++デザインパターン(1)

前書き

  私は過去にすべてのデザインモデルを学びましたが、長期間使用されていないため、徐々に忘れられていくため、最近プログラミングデザインパターンの学習を再開しました。私自身、C ++関連の開発やインターネット上のC ++の例に取り組んでいます。比較的少数(ほとんどがjava)であるため、これらの設計パターンはC ++コードで実装されます。
  設計パターンは、主にオブジェクト指向言語用に提案された設計アイデアであり、主にコードの再利用性を向上させるために使用されます。つまり、要件が変更された場合は、影響を減らし、変更を最小限に抑えます。
   オブジェクト指向には3つの特徴があります: 1。カプセル化、内部ロジックの実装の非表示、2。既存のコードの継承と再利用、3。多態性、オブジェクトの動作を書き換えて、複数のタイプの複数の動作を実現します。
   オブジェクト指向の設計パターンの6つの原則:
    1。依存関係の反転の原則:インターフェイスのプログラミングは、特定の実装ではなく抽象化に依存します。つまり、抽象化は実装の詳細に依存せず、実装の詳細は抽象化に依存します。したがって、静的部分を動的部分を分割します。分割しないと、静的部分が動的部分になります。
    2.開閉の原則:延長の場合は開き、変更の場合は閉じます。ビジネスは絶えず変化しています。プログラムを直接変更するのではなく、プログラムを変更、アップグレード、または保守する必要がある場合は、拡張メソッドを使用して、抽象化、継承、および多態性を柔軟に適用し、プログラムのスケーラビリティを強化する必要があります。
    3.単一責任の原則:クラスは1つのことだけを行い、クラスには変更の理由が1つだけあり、変更の方向はクラスの責任を意味します。
    4.よりリッチな置換の原則:サブクラスは親クラスを置き換えることができなければならず、親クラスが参照される場所はすべて、そのサブクラスのオブジェクトを透過的に使用できなければなりません。リヒターの置き換えは、主に継承と多形性の2つの特性に依存しています。
    5.インターフェイス分離の原則:インターフェイスを最小化し、クラスのパブリック関数の外部相互作用を最小化し、外部で必要なメソッドのみを公開します。
    6.最小知識原理:ディミット原理とも呼ばれ、オブジェクトが他のオブジェクトについての知識が最小である必要があることを意味します。つまり、クラスは他のクラスとの相互作用をできるだけ少なくします。

GoFとは

デザインパターンに関しては、GoFは切り離せないものでなければなりません。

GoF:Gang of Four、別名「Group of Four」、つまりEErich Gamma、Richard Helm、Ralph Johnson、JohnVlissides。

  1994年、これらの大物は「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」(つまり「デザインパターン」)という本を共同執筆し、出版しました。この本は最初に、ソフトウェア開発における設計パターンの概念に言及し、設計パターンを理論レベルに引き上げ、それらを標準化します。この本は23の基本的なデザインパターンに言及しています。今日、再利用可能なオブジェクト指向ソフトウェアの開発において、新しいデザインパターンがまだ出現しています。

デザインパターンの種類

の種類 説明
クリエイティブパターン(クリエイティブパターン) 主にオブジェクトを構築して、実際のシステムから分離できるようにするために使用されます
構造パターン(構造パターン) 主に、多くの異なるオブジェクト間で大きなオブジェクト構造を形成するために使用されます
行動パターン 主にオブジェクト間のアルゴリズム、関係、および責任を管理するために使用されます

クリエイティブパターン(クリエイティブパターン)

  1.シングルトンパターン:クラスにインスタンスが1つしかないことを確認し、それにアクセスするためのグローバルアクセスポイントを提供します。
  2.抽象ファクトリパターン(抽象ファクトリパターン):特定のクラスを指定せずに、一連の関連または相互依存オブジェクトインターフェイス作成します。
  3.ビルダーパターン:複雑なオブジェクトの構築をその表現から分離して、同じ構築プロセスで異なる表現を作成できるようにします。
  4.ファクトリメソッドパターン:オブジェクトを作成するためのインターフェイスを定義し、サブクラスにインスタンス化するクラスを決定させます。
  5.プロトタイプパターン:プロトタイプオブジェクトを使用して指定されたオブジェクトを作成し、コピーして作成します。これは、クローン作成と同じです。

構造パターン(構造パターン)

  1.アダプタパターン:あるクラスのインターフェイスを別のインターフェイスに変換します。アダプターは、元々互換性のなかったクラスを適合させて連携させることができます。
  2.ブリッジパターン:抽象部分をその実現部分から分離し、それらを個別に変更できるようにします。
  3.デコレータパターン:オブジェクトにいくつかの追加の責任を動的に追加します。拡張の観点からは、サブクラス化よりも柔軟性があります。
  4.複合パターン:オブジェクトをツリー構造に結合して、「部分全体」の階層構造を表します。これにより、お客様は単一オブジェクトと複合オブジェクトの使用に一貫性を持たせることができます。
  5.ファサードパターン:サブシステム内の一連のインターフェイスに一貫したインターフェイスを提供します。このようにして、サブシステムとクライアント間の緩い結合関係が実現されます。クライアントの場合、サブシステムのコンポーネントがシールドされ、クライアントが処理する必要のあるオブジェクトの数が減り、サブシステムが使いやすくなります。
  6.フライウェイトパターン:共有テクノロジーを使用して、多数のきめの細かいオブジェクトを効果的にサポートします。
  7.プロキシパターン:オブジェクトへのアクセスを制御するために、オブジェクトのプロキシを提供します。

行動パターン

  1.テンプレートメソッドパターン:動作中のアルゴリズムのスケルトンを定義し、サブクラスへのいくつかのステップを遅らせます。テンプレートメソッドを使用すると、サブクラスは、アルゴリズムの構造を変更せずに、アルゴリズムの特定のステップを再定義できます。
  2.コマンドパターン:データ駆動型の設計パターンです。リクエストをオブジェクトとしてカプセル化して、さまざまなリクエストで顧客をパラメータ化できるようにします。
  3.イテレーターパターン:オブジェクトの内部表現を公開せずに、集約オブジェクトの各要素に順番にアクセスする方法を提供します。
  4.オブザーバーパターン:オブジェクト間の1対多の依存関係を定義して、オブジェクトの状態が変化したときに、それに依存するすべてのオブジェクトに通知され、自動的に更新されるようにします。オブジェクト間に1対多の関係がある場合、オブザーバーパターンが使用されます
  。5。メディエーターパターン:メディエーターオブジェクトを使用して、一連のオブジェクトの相互作用をカプセル化します。仲介者は、オブジェクトが相互に明示的に参照する必要がないようにします。これにより、結合が緩み、オブジェクト間の相互作用を個別に変更できます。
  6. Mementoパターン:カプセル化を破壊しないことを前提として、オブジェクトの内部状態をキャプチャし、この状態をオブジェクトの外部に保存します。このようにして、オブジェクトを後で保存された状態に復元できます。
  7.インタープリターパターン:言語を指定して、その文法の表現を定義し、その表現を使用して言語の文を解釈するインタープリターを定義します。
  8.状態パターン:内部状態が変化したときにオブジェクトがその動作を変更できるようにします。オブジェクトは、それが属するクラスを変更しているようです。
  9.戦略パターン:一連のアルゴリズムを定義し、それらを1つずつカプセル化し、交換可能にします。このモードでは、アルゴリズムを使用しているクライアントとは関係なくアルゴリズムを変更できます。
  10.責任の連鎖パターン:要求の送信者と受信者の間の結合を取り除くために、複数のオブジェクトが要求を処理する機会があります。これらのオブジェクトをチェーンに接続し、オブジェクトが処理するまでこのチェーンに沿ってリクエストを渡します。
  11.ビジターパターン(ビジターパターン):オブジェクト構造の各要素に作用する操作を表します。クラスを変更せずに、これらの要素に作用する新しい操作を定義できます。

  注:各設計モードの詳細な説明は、将来的に記入されます。まず、全体的な要約を作成し、各設計モードを一緒に理解します。

おすすめ

転載: blog.csdn.net/CFH1021/article/details/108885862