ディレクトリ
使用
ブリッジモードである
式モデル
。
構造
図 - 図のブリッジモード構造。
実装 :定義実装インタフェース。
インタフェース実装者{
必要な部分の抽象の特定の機能//実装
公共ボイドoperationImpl();
}
必要な部分の抽象の特定の機能//実装
公共ボイドoperationImpl();
}
抽象化 :定義する抽象インタフェースを。
抽象{クラス抽象
//実装者が目標形成シンジケーション関係保持
実装者実装者保護を、
パブリック抽象(実装者実装側){
this.implementor =実装者;
}
//は、いくつかの特定の実装を達成するために必要とされてもよい再配置
公共ボイド動作(){
実装者.operationImpl();
}
}
//実装者が目標形成シンジケーション関係保持
実装者実装者保護を、
パブリック抽象(実装者実装側){
this.implementor =実装者;
}
//は、いくつかの特定の実装を達成するために必要とされてもよい再配置
公共ボイド動作(){
実装者.operationImpl();
}
}
ConcreteImplementor :達成 実装者 インタフェース定義を。
ConcreteImplementorA実装者{クラス実装
@Override
公共ボイドoperationImpl(){
実の//実装
するSystem.out.printlnは( "A具現");
}
}
クラスConcreteImplementorB実装実装者{
@Override
公共ボイドoperationImpl(){
//が真達成
するSystem.out.println( "具体Bを");
}
}
@Override
公共ボイドoperationImpl(){
実の//実装
するSystem.out.printlnは( "A具現");
}
}
クラスConcreteImplementorB実装実装者{
@Override
公共ボイドoperationImpl(){
//が真達成
するSystem.out.println( "具体Bを");
}
}
RefinedAbstraction :拡張 抽象 クラス。
抽象化RefinedAbstraction {クラス延び
公共RefinedAbstraction(実装者実装側){
スーパー(実装側);
}
公共ボイドotherOperation(){
//特定の機能を達成するため、この方法は、特定の実装の部分を使用して実装することができる、
大きくてもよいが、方法//抽象メソッドを使用して定義され、
//より多くの機能は、抽象定義合成方法を使用することによって達成しました。
}
}
公共RefinedAbstraction(実装者実装側){
スーパー(実装側);
}
公共ボイドotherOperation(){
//特定の機能を達成するため、この方法は、特定の実装の部分を使用して実装することができる、
大きくてもよいが、方法//抽象メソッドを使用して定義され、
//より多くの機能は、抽象定義合成方法を使用することによって達成しました。
}
}
テストコード
パブリッククラスBridgeパターン{
パブリック静的無効メイン(文字列[] args){
実装者実装=新しいConcreteImplementorA()。
RefinedAbstraction抽象=新しいRefinedAbstraction(実装)。
abstraction.operation();
abstraction.otherOperation();
}
}
パブリック静的無効メイン(文字列[] args){
実装者実装=新しいConcreteImplementorA()。
RefinedAbstraction抽象=新しいRefinedAbstraction(実装)。
abstraction.operation();
abstraction.otherOperation();
}
}
業績
特定の実装
その他の操作
その他の操作
シナリオ
あなたが一部で抽象化と実装の間に一定の結合関係を使用しない場合1は、ブリッジモードでは、別々に、いくつかの抽象的を達成するために使用することができ、
プログラム実行中の特定の実装および動的には抽象的な部分を使用する必要性を提供し、また、動的に特定の実装を切り替えます。
あなたには、いくつかの抽象的な部分を達成できるように、図2は、状況抽象的な部分場合は、表示されるいくつかの拡張機能を実現することができるはずです、あなたは、ブリッジモードを使用することができますし、
独立した変更は、個々の側に拡張側に影響を与えるだろう、一緒に混ぜて使用しないで、柔軟に拡張することができます。
3、あなたが変更された部分をするとき、顧客はブリッジモードには影響しませんが、顧客のための抽象インタフェースが実行されている、使用することができます
変更部を達成し、独立抽象的な部分の、それが顧客に影響を与えないだろう、と顧客が透明であると言うことができます。
図4に示すように、この場合には、多くのサブカテゴリーをもたらす継承実装は、ブリッジモードが考えられる場合には、機能的変異体の解析
理由、それによってサブクラスの数を減らす、それは異なる緯度に分離することができ、そしてそれらは、ブリッジモードで分離されているかどうかを確認します。
点数
システムは、2つのレベル間の静的ビルドのリンクを避けるために、役割の抽象と具象ロールメンバー間のより多くの柔軟性を追加する必要がある場合。
抽象化と具体的な役割の役割は、サブクラスによって拡張されなければなりません。この場合には、ブリッジモードでは、独立して拡張の具体と抽象キャラクタの役割の異なる柔軟性の組み合わせで、そしてよいです。
任意の変更を達成するための設計要件は、クライアントの役割に影響を与えるべきではない、またはクライアントの役割の実装は完全に透明で変更します。
抽象化と具体的な役割の役割は、サブクラスによって拡張されなければなりません。この場合には、ブリッジモードでは、独立して拡張の具体と抽象キャラクタの役割の異なる柔軟性の組み合わせで、そしてよいです。
任意の変更を達成するための設計要件は、クライアントの役割に影響を与えるべきではない、またはクライアントの役割の実装は完全に透明で変更します。