※デザインパターン※→☆☆============コンポジット構造モデルモード(J)

概要モード

開発では、我々は多くの場合、次の構造と同様に、コンポジットモードは良い解決策を提供し、再帰的なツリー構造の組み合わせを構築する場合があります。もちろん、あなたが直接、公式サイト三者ライブラリツリーを使用することができhttp://tree.phi-sci.com/をこれは、STLの拡張ライブラリとして使用することができます。

最も古典的な例では、コンピュータのファイルシステムです。そこファイルシステム内のフォルダのいずれかのファイルフォルダに配置することができ、フォルダの概念が、ファイルが何も置くことができません。フォルダとファイルは、再帰構造とコンテナ構造を構成しています。

フォルダやファイルは、異なるオブジェクトですが、彼らは、フォルダ、その意味では、フォルダやファイルの中に配置することができ、同じ型のオブジェクトとして見ることができるので、我々は、フォルダやファイルを置くことができますが、まとめディレクトリエントリ(ディレクトリエントリ)と呼ばれる。この観点では、ファイルやフォルダが同じオブジェクトです。
だから、我々はフォルダやファイルが見えるように同じものとしてディレクトリエントリ、コンテナと内容と見られていることができ、あなたは簡単に我々は再帰的な問題に対処することができ、いずれかの容器に入れた容器に、彼らは、コンテンツに配置することができますその後、小さな容器に、容器及び内容物に継続することができ、これは、容器構造と再帰的な構造を構成します。
我々は、本明細書で論じ複合モデルにこのリードは、複合モード、複合モードは、Aのコンテナ構造を作成するために使用されます。これは、一貫性のあるコンテンツのコンテナで、再帰的に動作させることができます。次のとおりです。

 

次のロールからなる複合パターン

  • 抽象コンポーネント(コンポーネント)の役割:これは抽象的役割である、それはインターフェースの組み合わせに参加する市民を定義するオブジェクトとそのデフォルトの動作では、すべての子オブジェクトを管理するために使用することができます。子オブジェクトの合成は、一般的には、オブジェクトのコンポーネントタイプとして含まれているオブジェクトです。式セキュアモードの合成では、メンバーは、文字のサブオブジェクトを管理するための方法を定義していない、この定義は、分岐メンバーオブジェクトで与えられます。
  • リーフ部材(リーフ)の役割:葉はない従属オブジェクトが、元のオブジェクトの挙動の組み合わせの定義に参加するオブジェクトのサブオブジェクトです。
  • 支部会員(コンポジット)の役割:下位レベルのオブジェクトの代表の組み合わせは、子オブジェクトを持っています。すべての枝は、子オブジェクトを管理するコンポーネントクラスのメソッドを与えられています。

 

モード構造

トランスペアレントモード

セーフモード

 

モード議論

合成モードは、親オブジェクト管理の管理を提供することはできませんが、経営陣は、子オブジェクトの管理モードに適した場所を合成する必要があります。そのようなアドオン()、削除()、でGetChild()メソッドなどの子オブジェクト、管理声明で。透明性のある方法と安全な方法で:提供管理の位置に応じて二種類に分けられました。

 

セーフモードモード合成

  • リーフノードは、()メソッドなどを追加していないため、利点は、安全な練習であるリーフノード上のクライアントは、これらのメソッドを呼び出すためにので、それはコンパイル時に合格していません。
  • 葉及び合成クラスが異なるインターフェースを有するので、欠点は透明ではなく、クライアントは関連リーフ・ノードは、いくつかの分岐ノードを区別する必要があるメソッドを呼び出します。

 

トランスペアレントモードの組み合わせモード

   セキュリティモードが透過モードの組合せモードであるリーフノードまたはリーフノードのいずれかで、特定のクラスのメンバの全てを必要とし、すべてのノードがメソッドに対応している、ある固定されたインターフェースに準拠。しかし、この方法無関係なリーフノードで何もしません。

  • クラスメンバーのすべての利点は、同じインターフェイス、クライアントのビューを持っている、葉の数の違いは、枝のクラスオブジェクトのオブジェクトは、インターフェイスレベルで少なくとも消えました。
  • 葉はマイナーな性質が異なるいくつかの点でノードので欠点は、安全ではありません。葉は、オブジェクトは、子ノードが存在することはできません。リーフノードメソッドを呼び出して、実行時エラーが発生するのは簡単です。

 

パターンの実装

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
シャオティンノートはできるだけ詳細に説明する後いくつかの知識を説明し、私はあなたが私のブログに注力していきたいと考えています。
このセクションでは、ここで最後に指摘しています。

シャオティンは、自分の学習経験を置くために時間を持ってみんなと一緒に書き込みや共有に優れた知識を感じるだろう。
道路の開発をプログラミングすることは非常に多く、一緒に共有して一緒に学び、共通の進行できるようにし、非常に長いです。
あなたがどんな記事の監督の場所を持っている場合は、私を修正してください。私はあなたを願っていますし、私はプログラミングに関連する問題を議論するより、コメントすることができます。
最後に、ご支援をありがとうございました~~~となって

       完全なC ++コードの例(テスト対象コードをVS2017で実行することができる)
コードおよび関連情報ダウンロード
              https://gitee.com/arvinxt/DesignPattern

公開された170元の記事 ウォンの賞賛207 ビュー459万+

おすすめ

転載: blog.csdn.net/xiaoting451292510/article/details/103681929