※デザインパターン※→☆☆============デコレータ構造モデルモード(IX)

概要モード

責任分担が明確でない場合は、重複コードの完全な、この時間は責任を描画するための鍵である一方、ソフトウェア・コンポーネントの設計では、結果は、多くの場合、需要が変化し、サブカテゴリーの急速な拡大と継承を使用することによって得られます。典型的なモデルは表し:デコレーター

コアブリッジは、プロパティと行動缶を達成するように、あなたが行動の二つの別々のクラスを変更する必要があると彼から属性際、ブリッジモードは体の実現に行動を達成するために、抽象化での特性を達成するために使用することができるように、分離と抽象化を達成することです最大継承と比較される独立した関連するそれらの方法の間のブリッジを介して変化する、(ある、それらを結合、抽象クラスでは隠れている)、このブリッジの関係が動的に変更されるように結合され、利点は、時には我々はまた、代理店モデル、に対処するための様々な実装クラスの振る舞いに、エージェントの行動の進化としてそれを解釈することができます。

※デザインパターン※→☆☆============橋構造モデルモード(7)

上記ブリッジ特性及び動作を実現するようにブリッジ(抽象クラスに隠されたの両方に、すなわち結合)を介してモード、コンピュータのタイプ(アブストラクト)とコンピュータメーカー(エンティティ)は、独立して変化させることができます。

例えば、コーヒーの古典的な例:コーヒーカップ、例えばは、ミルクの余分なポイントなしのカップやマグカップの点では、だけでなく、牛乳がある場合、単純な継承、これらの4つの特定の実装(カップマグカップミルク。概念の間にはミルク)はカップ牛乳があるので、重複するが、また、カップで牛乳なし、カップで再びこのレベルならば、その後2が継承された実装、それは混乱、貧しい人々スケーラビリティをクリアしているはありません。そして、私たちは、ブリッジモードではカップ/マグカップ(抽象)。それを実装するために使用し、ミルクなしのミルク/(固体)。

        Decoratorパターンは、サブクラスの継承階層が深すぎると、継承は層数を削減することは非常に賢いことができ、コードの量を減らすのに効果的な機能を実装するために必要な、間違いなく武器OO思考で適用されます。あなたがクラスに新しい操作を追加する必要がある場合、我々はその後、サブクラスを継承し、親クラスなどを実施するために使用する、実装はサブクラスを配置する必要があります。我々はプロジェクトが徐々に増加進むにつれて、我々は層の数が継承することを見つけたとき、ある程度の追加の各操作のために、あなたはサブクラスを継承するいくつかの項目を、持っている機能に必要がある場合ただし、これは問題をもたらします深さは前例のないこと、および多型を達成するための抽象基底クラス、各操作のための純粋仮想関数を追加する必要があります。同様の問題は、Decoratorパターンは、良い解決策を与え、抽象基底クラスでは、我々はどのように仮想関数少なく表示されます。

 

オブジェクトへのDecoratorパターンを動的にいくつかの追加の責任を追加します。増加は、機能的に、Decoratorパターンは、より柔軟なサブクラス比べ。インターフェイスを変更しないという前提の下では、と考えクラスのパフォーマンスを向上させます。

  •     1)追加的な責任を追加するためにクラスの機能、またはクラスを拡張する必要があります。
  •     2)動的オブジェクトに機能を追加するために、これらの機能が取り消され、再度動的であってもよいです。
  •     3)基本的な機能の順列及び組合せの数を増加させる必要がので実用的でない遺伝こと、特徴の非常に大きな数を生成しました。

 

次のロールで構成さDecoratorパターン

  •     抽象コンポーネント(部品)の役割:抽象インタフェース所与は、追加の責任を受信する準備ができて調節します。
  •     詳細部材(ConcreteComponent)役割:追加のクラスを受信する責任を定義します
  •     装飾的な役割(デコレータ):(成分)として抽象コンポーネントとのインタフェースへの一貫したインターフェースを定義するオブジェクトを保持部材
  •     具体的な装飾的な役割(ConcreteDecorator):「ラベル」コンポーネントオブジェクトを担当し、追加の責任
     

 

モード構造

モード議論

いくつかの場合に使用されるデコレータパターンは、我々は、特にスタティック型の導入のための基礎として、「継承過度の使用は、目的関数を拡張する」ことができる、この拡張モード不撓性になり;およびサブクラスの増加(と拡張子増)、各サブクラスの組み合わせ(拡張子の組み合わせ)は、様々なサブクラスの腫れ引き起こす可能性があります。

  • いくつかのケースでは、我々は、この拡張モードが柔軟性のないなって、導入されたタイプの継承の静的な性質のために、「目的関数を拡張するために過度の使用継承」であってもよく、そして増加した(増加サブクラスの拡張)、複数の拡張サブクラスにおける様々なサブクラスの結果の組み合わせ(拡張子の組み合わせ)。我々は、非継承によって拡張された機能を達成するための方法を見つける必要がありますが、インタフェースはクラスが行わ変化しないこと。
  • 「拡張オブジェクト機能」を作る方法、必要に応じて動的に達成することができますか?回避しながら、「増加した拡張機能を、」サブクラスの拡張の問題が原因?だから、任意の「機能という
    衝撃による拡大や変更は、」最小となります。

上記によると、我々はDecoratorパターンは、次の主要なポイントを持って見ることができます

  • 技術の組み合わせを使用することによって1は、実行時に動的にオブジェクトの機能を拡張し、複数の機能に応じて拡張する必要があるかもしれない能力を達成するために、Decoratorパターンを継承していません。「柔軟性に欠ける」とによって引き起こされる継承の使用は避けてください「マルチサブクラス波及効果を。」
  • インターフェースクラスの継承関係の2.Decorator性能があるコンポーネント、すなわちデコレータクラス継承コンポーネントクラスは、インターフェイスを有しています。しかし関係で、すなわちデコレータターンは、別のコンポーネントクラスを使用し、パフォーマンスの組み合わせとして実装され、HAS-コンポーネント。
  • 3.Decoratorオブジェクトモデルは問題、デコレータモードアプリケーションの要旨明らかに(「複数の方向に主要クラスの拡張」を解決するために、ファイル、ネットワークと暗号化され、「派生クラス多重継承がマルチワード」を解決しない、二つのバッファであります)延長方向 - 「装飾的」な手段です。

デコレータと差の橋

デコレータは、既存の機能の拡張である、彼らは既存のクラスの周りの装飾と機能的な装飾公転していることで、どんなに装飾の変化、それは(または周りの2つの共通インターフェースに装飾されたクラスの周りの変化でなければなりません変化する)、クライアントのために、前後に装飾オブジェクトを呼び出すためには、同じである必要があります。

ブリッジモードは、動作が少なく制限され、ブリッジの目的を達成するために実装する完全な実装クラスに橋渡しするオブジェクト(抽象)の行動や外から分離ので、この制約は必要であれば、缶れますデコレータモードを使用して、ブリッジモードおよびその逆を使用することができます

 

違いデコレーター、橋、アダプタの

  • アダプター:(互換性のあるポストプロジェクトの開発)を使用して、一緒に集まって、互換性のない2つのクラス
  • :抽象と分割オープン、独立した行動が、動的に(設計の早い段階でプロジェクト開発)を結合することができます
  • デコレータ:いくつかの追加の責任(プロジェクト開発後のメンテナンス)を追加するためのオブジェクトへの動的

理解高めるために、私はまだケースを処理するために、[メンバー](デスクトップ、ノートブック、サーバ)、メーカー[役割](ASUS、DELL、HP)コンピュータを使用しています。それかどうかは、コンピュータの変更の種類、あるいはベンダーの変化があります。急速な拡大のサブクラスのニーズに変更すると、重複したコードの完全な一方で、キーは責任を描くことです。

ブリッジ:コンピュータ(アブストラクト)とコンピュータメーカー(エンティティ)モードの種類を組み合わせることにより、抽象クラス3 * 3エンティティクラスは、コンピュータの組み合わせの9種類を表すことができます。しかし、あなたはコンピュータメーカー(エンティティ)は、例えば、混合されることができません:コンピュータ機能の両方ASUS、HP、別の機能。

デコレータ:コンピュータのタイプ(部材)とコンピュータメーカー(文字)方法、クラス3 + XX部材の役割して追加機能は、コンピュータの組み合わせ、様々なタイプで発現させることができます。+ ASUSのデスクトップ機能、機能のデスクトップ+ ASUS + DELL機能。比較するとより柔軟な用語。

権利が目的を達成するために制限されている場合に使用することができる必要が結合左、デコレータモード、ブリッジモードおよびその逆を使用することができる、UMLダイアグラムからわかります

 

最後に、我々はまた、注意深く実際の状況を考慮する必要がありますどのように特権モードが、どんなに。

 

パターンの実装

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

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

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

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

おすすめ

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