デザインパターン


シリーズが進むにつれて、名前が得られる奇妙な?
ブリッジパターン?
我々は文字通り、それが比喩のより多くの橋を建設していません.
今日は学びます.
ブリッジパターンの後の中心的概念
  • ブリッジパターン
  • を実行する方法
  • 機会を認識する方法ブリッジパターン
  • は、ブリッジパターン
  • の利点と下側

    定義


    ブリッジパターンは、以下のようにモジュール間でASCIIブリッジを構築しなければならないと述べます.

    ジャスト冗談!
    すべての深刻さで、橋のパターンは抽象化と実装の分離のために提唱.
    しかし、抽象化と実装によって何を意味しますか?
    まあ、物事を簡単にするには、例を超えて行きましょう.

    問題


    その初期のあなたのアマゾンを想像してください.
    戻るときにのみハードカバーの本を販売した.
    クラスは次のようになります.

    これは間違いなく動作します.
    しかし、それは少しifffyに見えます.
    我々はActionBookと呼ばれる新しい本を作成したい場合は、印刷本として、オーディオブックとして両方を公開したい.
    2つの新しいクラスを作成することを強制されます.
  • ActionPrintBook
  • ActionAudioBook
  • しかし、我々はまた、本のデジタル版を出版したい場合はどうですか?
    もう一度、我々は新しいActionDigitalBookクラスを作成することを余儀なくされます.
    すべての新しい本のための一言で言えば、我々は各バージョンの3つの追加クラスを作成する必要があります.
    また、あなたが本に変更を行う場合は、複数の場所で、したがって、乾燥(自分自身を繰り返すことはありません)原則を破る必要があります.
    時間をかけて、これは非常に高速な厄介な取得します.
    しかし、心配しないでください、これは橋パターンが輝くところです.

    解決策


    我々が密接にクラスを調べるならば、オーディオブックと印刷本の違いは何ですか?
    オーディオブックがオーディオを出力する間、あなたは明らかに内容を言うでしょう、印刷本はテキストの束を出力します.
    私たちの最初のステップは、本のクラスからコンテンツを分離することです.
    コンテンツプロバイダインターフェイスを作成しましょう
    interface IBookContentProvider {
        public String[] getContent();
    } 
    
    class AutobiographyBookContentProvider implements IBookContentProvider {
    
        public String[] getContent(){
            return ["I was a boy", "now I'm not a boy"];
        }
    }
    
    class AutobiographyAudioBook implements AudioBook {
            IBookContentProvider contentProvider;
    
            public AutobiographyAudioBook(IBookContentProvider contentProvider){
                self.contentProvider = contentProvider;
            }
    
            public void publish(){
                String[] content = self.contentProvider.getContent()
    
                System.out.println("Published Book: " + content)
            }
    }
    
    ここで我々がしたことを要約しましょう
  • 最初に、私たちはIBookContentProviderインターフェースを作成しました.そして、それは本質的に我々の内容を得る方法getContentを宣言します.
  • 私たちのAutobiographyBookContentProviderインターフェイスを実装するIBookContentProviderと呼ばれる最初のコンテンツプロバイダを作成しました.
  • 最終的に、私たちはAutobiographyBookContentProviderに建設者を通してAutobiographyAudioBookに接続しました.
  • たった今、我々が新しい本を作成したいならば、我々は単に新しい本内容プロバイダーをつくって、単に我々の本タイプ(印刷、オーディオブック、デジタルなど)にそれをつなぎます
    これは、ブリッジパターンの基本的な前提です.
    それは相続をめぐって構成を擁護する.

    いつこのパターンを使用するか?


  • いくつかの機能のいくつかのバリアントを持つモノリシッククラスを分離するときに、ブリッジパターンを使用します.クラスが大きくなるほど複雑になる.それは変化をするのが難しくなります、そして、単純に壊れることの高い可能性があります.これは、ブリッジパターンが来るところであり、この巨大なモノリシッククラスをいくつかのクラス階層に分割します.各クラス階層で独立してコードを変更することができます.したがって、より簡単に実行できます.

  • クラスをいくつかの独立したバリアントに拡張する場合は、ブリッジパターンを使用します.ブリッジパターンはクラスを階層に分けることを提唱している.あなたは本質的に一緒にミックスし、一致することができます一緒に動作するビルディングブロックを作成します.

  • 実行時に実装を切り替えることができる必要がある場合は、ブリッジを使用します.ブリッジパターンを実装しているなら、実装を変更するのはとても簡単です.あなたは、単にあなたの合格クラスを変更する必要があります.
  • 利益と欠点


    それはすべての日光と虹ではありません、橋のパターンの利点と下を行きましょう.

    利益

  • プラットフォームに依存しないクラスやアプリを作成します.
  • クライアントは、nitty gritty詳細を知りません、それは抽象を扱うだけです.
  • あなたは独立して新しい抽象化と実現を導入することができます.
  • あなたは抽象化のハイレベルロジックと実装の詳細に焦点を合わせます.
  • 下方

  • プログラムは、多くの異なるクラスとインターフェースの追加のためにより複雑になります.
  • 結論


    橋のパターンは、最も有用なデザインパターンの一つである、私はあなたが両方の仕事とペットのプロジェクトでそれをいくつかの使用を見つけることを確認します.私は疑問を持ってそれを終了したいです、あなたは橋のパターンを使用したことがありますか?もしそうならば?残念ですか.
    読書ありがとう!

    更なる読書


    デザインパターンについてもっと知りたいなら、Diving into Design Patterns .それは楽しさと魅力的な方法で、GOFの本で見つかったすべての23のデザインパターンを説明します.
    私が推薦するもう一つの本は、楽しくて読みやすい説明がある242479152ドルです.

    プラグ


    さえずりの上で私について来てください
    また、このような内容については、ブログをチェックしてください.
    Heads First Design Patterns: A Brain-Friendly Guide