クラス構造 - ブリッジモード
まず、定義(何)
抽象と2つの独立して変化することができるように、デカップリング
1)抽象抽象的役割
文字の振る舞いを定義し、役割の実現への参照
役割の2)実装者実現
の役割の実現の動作を定義します
3)RedefinedAbstractionは抽象的役割を改正しました
抽象キャラクタの挙動を修正し、あなたはロール固有の関数の動作を呼び出すことによって実現することができます、また、追加のロジックを追加することができます。
役割の4)ConreteImplementor具体的な実現
の役割の具体的な実現を達成するための行動
第二に、なぜ
抽象継承が安定でなければならない、変更、重合の変化を置く一方向(抽象継承)、重合による方法の変更の他のバリエーションが存在します。
デザインパターンは、基本原則に沿って、変更の本質をカプセル化することです-開口部と変更の顔という原則を閉じ、オープン拡張の顔を閉じます。侵襲性の高い抽象継承は、継承したら、サブクラスのメソッドを所有する必要があります。この方法が適用サブクラスではない場合は、サブクラスでは除去が困難です。層の継承をn個の場合には、方法を変更することは、大きな、大きなリスクになります。変更、抽象的継承パッケージ変更の使用のみを比較するときに継承カップリングは、非常に明確ではありませんあまりにも強いです。非常に不安定で、方法の連続して開閉の原則に従って、パッケージの変化が再び変更を入れて、やり方を重合させることによって洗練すると、これは再結合継承されたメソッドを達成する必要があります。それが出共有リスクの変化となっているとしてこのように、変更は、継承されたメソッド、改善された安定性のリスクを軽減します。これは、ブリッジモードです。
切り離さ性質またはあるブリッジモードでは、提案された設計パターン継承欠点を解決します。
第三に、どのように(例えば)
1)抽象人を定義します
/ ** *抽象ブリッジモードとデカップリングを達成するため、それは欠点を解決するために提案されている設計パターンを継承 * @author TimFruit * @date 2019年6月25日午後04時22分[NASB] * / パブリック 抽象 クラス抽象{ 保護実装者実装者; パブリック抽象化(実装インプリ){ // の抽象化された実装に依存役割をユーザに思い出させるために、これらの構造パラメータにより具現注射 この .implementor = 実装; } 公共 ボイド動作(){ System.out.printlnは(「セクション「公共の運転方法); // 文字の特定の実装、ロジックの統合プロセスの一部でのみ達成することができ 、この.implementor.operationImpl(); } }
2)重量抽象を定義
パブリック クラス RefinedAbstractionは延び抽象{ 公共RefinedAbstraction(実装者実装){ スーパー(実装)を、 } }
3)実装のインタフェースを定義します
パブリック インターフェースの実装者{ ボイドoperationImpl(); }
4)によって具現化
パブリック クラス ConcreteImplementorAが実装実装者{ @Override 公共 のボイドoperationImplを(){ System.out.printlnは( "A具体实现..." ); } }
パブリック クラス ConcreteImplementorBは実装実装者{ @Override 公共 無効operationImpl(){ System.out.printlnは( "B具体实现を..." ); } }
5)試験クラスシーン
public class Client { public static void main(String[] args) { Implementor implementorA=new ConcreteImplementorA(); Abstraction abstractionA=new RefinedAbstraction(implementorA); abstractionA.operation(); Implementor implementorB=new ConcreteImplementorB(); Abstraction abstractionB=new RefinedAbstraction(implementorB); abstractionB.operation(); } }
6) 结果
部分公共方法操作...
A具体实现...
部分公共方法操作...
B具体实现...
四、注意事项
使用该模式主要考虑拆分抽象和实现. 它的意图还是对变化的封装, 尽可能把可能变化的因素封装到最细丶最小的逻辑. 当继承有n层继承的时候, 可以考虑该模式.
学习资料:
<设计模式之禅>