バックグラウンド
実際には、オブジェクトには複数の属性があることがよくあります。人を分類すれば。性別、肌の色、地域、または母国語で分類できます。
この人をコードで表現するにはどうすればよいですか?継承で表現すると、サブカテゴリが多くなるため、拡張が非常に面倒になります。
ブリッジモードを使用して、これらの問題を解決できます。
ブリッジモードとは
「「抽象化をその実装から切り離して、2つが独立して変化できるようにします。
」
ブリッジングモードは、合成モードを使用して継承関係を置き換えます。これにより、抽象化と実装の間の結合度を減らすことができます。
ブリッジモードの主な構造:
「「」
抽象化の役割:抽象クラスを定義し、実現されたオブジェクトへの参照を含めます。
拡張抽象化(洗練された抽象化)ロール:これは抽象ロールのサブクラスであり、親クラスのビジネスメソッドを実装し、構成関係を通じて実現されたロールのビジネスメソッドを呼び出します。
実装者の役割:呼び出す抽象役割の拡張のために、実装された役割のインターフェースを定義します。
具体的な実装者(具体的な実装者)の役割:実現する役割のインターフェイスを具体的に実現します。
ブリッジモード
コード
実装者
interface Implementor {
void operationImpl();
}
ConcreteImplementorA
public class ConcreteImplementorA implements Implementor {
@Override
public void operationImpl() {
System.out.println("具体实现化(Concrete Implementor)角色被访问");
}
}
抽象化
public abstract class Abstraction {
protected Implementor implementor;
public Abstraction(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
RefinedAbstraction
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
@Override
public void operation() {
System.out.println("扩展抽象化(Refined Abstraction)角色被访问" );
implementor.operationImpl();
}
}
テストコード
public class BridgeTest {
public static void main(String[] args){
Implementor implementorA = new ConcreteImplementorA();
RefinedAbstraction refinedAbstraction = new RefinedAbstraction(implementorA);
refinedAbstraction.operation();
}
}
試験結果:
扩展抽象化(Refined Abstraction)角色被访问
具体实现化(Concrete Implementor)角色被访问
ブリッジモードについての考え
ブリッジモデルの一般的な使用例は、継承を置き換えることです。継承には、抽象化、カプセル化、ポリモーフィズムなど、多くの利点があることがわかっています。親クラスは共通性をカプセル化し、子クラスは特性を実装します。継承はコードの再利用(カプセル化)の機能を十分に実現できますが、これは継承の大きな欠点でもあります。
親クラスが所有するメソッドのため、サブクラスがそれを必要とするかどうかに関係なく、サブクラスもそれを継承します。これは、継承が非常に侵襲的であり(親クラスのコードがサブクラスに侵入する)、また、肥大化するサブクラス。したがって、デザインパターンには、継承ではなく、構成/集約を優先的に使用するという原則があります。
ブリッジモードを使用する場合、主な考慮事項は、抽象化と実装をどのように分割するかです。継承が含まれるとすぐにこのモードの使用を検討する必要はありません。では、継承は何をすべきでしょうか。ブリッジモデルの目的は、変更をカプセル化し、リスクの拡散を回避するために、変更される可能性のある要因を最小および最小の論理単位にカプセル化することです。したがって、システムを設計するときに、クラスの継承レベルがNであることがわかった場合は、ブリッジモードの使用を検討できます。
過去におすすめ
QRコードをスキャンして、よりエキサイティングになります。または、WeChatでLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます
回复"java" 获取java电子书;
回复"python"获取python电子书;
回复"算法"获取算法电子书;
回复"大数据"获取大数据电子书;
回复"spring"获取SpringBoot的学习视频。
回复"面试"获取一线大厂面试资料
回复"进阶之路"获取Java进阶之路的思维导图
回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)
回复"总结"获取Java后端面试经验总结PDF版
回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)
回复"并发导图"获取Java并发编程思维导图(xmind终极版)
もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。