ブリッジモード(ブリッジ):
ブリッジは、両方とも独立に変化させることができるように、抽象的分離を実現するために使用されます。
ブリッジモードの役割:
1)抽象化の役割(抽象):これは、抽象インターフェースを定義するために使用され、オブジェクト型とオブジェクトのかなりインプリメンタ定義するインターフェイス、より通常は抽象クラスが(インタフェースを実装する)を維持することができるが、それは、実装者の間に有する関連しています関係。
改善後の抽象化(RefinedAbstractionの2)の役割):通常具象クラスRefinedAbstraction方法で抽象メソッド抽象化を実装する実装者が呼び出すことができ定義しました。
3)ロール(実装者)を実装:そのサブクラスの実現に、通常の状況下での操作のいくつかの基本的なステートメントを提供します。
4)実装特定の役割(ConcreteImplementorA、ConcreteImplementorB):ランタイムに応じて定義された実装者メソッド実装リヒターは置換原理、ConcreteImplementorオブジェクト交換親クラス・オブジェクトは、抽象オブジェクトクラスの特定の業務方法を提供することにあります。
なぜブリッジモードを使用できますか?
ブート、メソッドのシャットダウンのセットを定義する抽象リモートコントロールクラスを、作成し、継承または実装するための特定のリモートクラスを作成します。私たちは皆、以前の我々のアプローチは、このようにする必要があり、リモートコントロールの共通の特徴は、オフ、オンになっている知っています各TVセットのニーズを満たすことができ、このインターフェイス、。しかし、ある日突然、顧客はこのリモートコントロール機能が少なすぎると感じ、今回あなたは唖然、戻るボタンを追加する必要があり、あなたは抽象クラスを与える、新しいメソッドを追加し、突然プログラムエラーの大面積を見つけ、その理由は、サブクラスではありません親の実装方法、その落雷のバラが変更されました。最後に良い方向に変え、顧客は言った:メニュー機能が欲しい、そう....
上記の例から見ると、この設計はに反しているOCP原則クラスとクラス間の結合が高すぎるため、どのカップリングにそれを軽減するには?両方が独立して変化させることができるように、ブリッジモードでは、実装され、抽象とデカップリングするために使用されます。
ケース:
。1 内部 クラスプログラム 2 { 3 プライベート 静的 ボイドメイン(文字列[]引数) 。4 { 5 ImageImpイメージ= 新しい新しいWindowsImp(); 6 イメージIMG = 新しい新しいJPGImage(); 7 img.SetImageImp(画像) 。8 img.ParseFile(「中国マップ」); 9 } 10 } 11 12である /// <まとめ> 13である /// オペレーティングシステム実装する抽象クラス 図14は、 /// </要約> 15 内部 インターフェースImageImp 16 { 17 ボイドDoPaint(); 18れる } 。19 20である /// <まとめ> 21である /// 特定の実装クラスとして、Windowsオペレーティングシステム、実装クラス、 22である /// </要約> 23である 内部 クラスWindowsImp:ImageImp 24 { 25 公共 ボイドDoPaint() 26は 、{ 27 Console.WriteLineを(" Windowsオペレーティングシステムの表示画像" ); 28 } 29 } 30 31である /// <まとめ> 32 /// 特定の実装クラスとしてのLinuxオペレーティングシステム、実装クラス、 さ33 /// </要約> 34である 内部 クラスLinuxImp:ImageImp 35 { 36 公共 ボイドDoPaint() 37 [ { 38である (Console.WriteLineを" LinuxのOSの表示画像" ); 39 } 40 } 41は、 42である /// <まとめ> 43である /// 抽象クラスとして、抽象クラスの画像 44が /// </要約> 45 内部 抽象 クラス画像 46は、 { 47 保護ImageImp IMP; 48 49 公共 ボイドSetImageImp(ImageImp IMP) 50 { 51れる この .imp = IMP; 52である } 53である 54れる パブリック 抽象 ボイド構文解析ファイル(文字列fileNameに); 55 } 56である 57れる /// <まとめ> 58 /// JPG形式の画像クラス、抽象クラスを拡張として働く 59 /// </要約> 60 内部 クラスJPGImage:画像 61は、 { 62れます 公共 オーバーライド ボイド構文解析ファイル(文字列filename)で 63である { 64 imp.DoPaint(); 65 Console.WriteLineを(" {0}、フォーマットJPG " ファイル名); 66 } 67 } 68 69 /// <まとめ> 70 // / PNG画像フォーマットタイプは、抽象クラスの拡張として機能 71である /// </要約> 72 内部 クラスPNGImage:画像 73は 、{ 74 公共 オーバーライド ボイド構文解析ファイル(文字列filename)で 75 { 76 imp.DoPaint(); 77 Console.WriteLineを(" {0}、PNG形式" ファイル名); 78 } 79 }
長所と短所の橋のデザインパターン:
長所:抽象と実装は他に影響を与えずに、独立して拡張することができる、その実装のデカップリング、から抽象インタフェース。
短所:システムの複雑さを増します。
使用シナリオ:
1)場合、システムは二つのレベル間の静的ビルドのリンクを避けるために、役割の抽象と具象ロールメンバー間のより多くの柔軟性を追加する必要があります。
2)クライアントの役割に影響を与える、またはクライアントの役割の変化をもたらすべきではないすべての変更を達成するための設計要件は完全に透過的です。
3)複数のプラットフォームやグラフィックウィンドウシステムにまたがるする必要があります。
4)クラスの変化は、二つの独立した寸法があると、2つの寸法が拡張する必要があります。
1)ブリッジモードの変更は、それが何をどのように変更するには、多次元のニーズである、使用のために提案しましたか?主にプロキシモードインターフェイスの分離を提唱するために、提案されたアダプタモードは、互換性のない互換性から、つまり、互換性の問題を解決することです。