デザインパターンのブリッジモード
目次
2.2。携帯電話の操作上の問題を解決するための従来のソリューションの分析
1.基本的な紹介
1)ブリッジモード(ブリッジモード)とは、実装と抽象化を2つの異なるクラスレベルに配置して、2つのレベルを個別に変更できるようにすることを指します。
2)構造設計モードです
3)ブリッジモードは、クラスの最小限の設計原則に基づいています。これにより、カプセル化、集約、および継承を使用して、さまざまなクラスがさまざまな責任を引き受けることができます。その主な機能は、抽象化を実装(実装)から分離することです。これにより、各部分の独立性を維持し、それらの機能拡張に対応できます。
2、例のデモンストレーション
2.1、携帯電話の問題
2.2。携帯電話の操作上の問題を解決するための従来のソリューションの分析
1)スケーラビリティの問題(クラスの爆発的増加)携帯電話のスタイル(ロータリー)を追加する場合は、さまざまなブランドの携帯電話のカテゴリを増やす必要があります。同様に、携帯電話のブランドを追加する場合は、各携帯電話スタイルのカテゴリ。
2)単一責任の原則に違反する携帯電話のスタイルを増やすと、すべてのブランドの携帯電話を同時に増やす必要があり、コードの保守コストが増加します。
3)解決策-ブリッジモードを使用する
2.3。ブリッジモードの解決策:UML図
2.4、コードの実装
ブランドインターフェース:(実装)
//接口
public interface Brand {
void open();
void close();
void call();
}
Xiaomi携帯電話
public class XiaoMi implements Brand {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println(" 小米手机开机 ");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println(" 小米手机关机 ");
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println(" 小米手机打电话 ");
}
}
生体内携帯電話
public class Vivo implements Brand {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println(" Vivo手机开机 ");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println(" Vivo手机关机 ");
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println(" Vivo手机打电话 ");
}
}
携帯電話のインターフェース:(要約)
public abstract class Phone {
//组合品牌
private Brand brand;
//构造器
public Phone(Brand brand) {
super();
this.brand = brand;
}
protected void open() {
this.brand.open();
}
protected void close() {
brand.close();
}
protected void call() {
brand.call();
}
}
電話の分類:直立した電話
public class UpRightPhone extends Phone {
//构造器
public UpRightPhone(Brand brand) {
super(brand);
}
public void open() {
super.open();
System.out.println(" 直立样式手机 ");
}
public void close() {
super.close();
System.out.println(" 直立样式手机 ");
}
public void call() {
super.call();
System.out.println(" 直立样式手机 ");
}
}
この時点でさまざまなタイプの携帯電話を追加する場合は、実装クラスを記述せずにPhoneクラスを直接継承できます。
たとえば、折りたたみスタイルの携帯電話を追加します。
//折叠式手机类,继承 抽象类 Phone
public class FoldedPhone extends Phone {
//构造器
public FoldedPhone(Brand brand) {
super(brand);
}
public void open() {
super.open();
System.out.println(" 折叠样式手机 ");
}
public void close() {
super.close();
System.out.println(" 折叠样式手机 ");
}
public void call() {
super.call();
System.out.println(" 折叠样式手机 ");
}
}
テスト:
package com.atguigu.bridge;
public class Client {
public static void main(String[] args) {
//获取折叠式手机 (样式 + 品牌 )
Phone phone1 = new FoldedPhone(new XiaoMi());
phone1.open();
phone1.call();
phone1.close();
System.out.println("=======================");
Phone phone2 = new FoldedPhone(new Vivo());
phone2.open();
phone2.call();
phone2.close();
System.out.println("==============");
UpRightPhone phone3 = new UpRightPhone(new XiaoMi());
phone3.open();
phone3.call();
phone3.close();
System.out.println("==============");
UpRightPhone phone4 = new UpRightPhone(new Vivo());
phone4.open();
phone4.call();
phone4.close();
}
}
第三に、JDBCのブリッジモードのソースコード分析
3.1、JDBCのブリッジモードのソースコード分析
Jdbcのドライバーインターフェイス(ブリッジモードから見た場合)は、ドライバーがインターフェイスです。以下にMySQLドライバーとOracleドライバーがあり、実装インターフェイスクラスとして使用できます。
3.2、JDBCの簡単なUML図
第四に、ブリッジモードの注意事項と詳細
ブリッジモードの注意事項と詳細
1)抽象化部分と実装部分の分離が実現され、システムの柔軟性が大幅に向上し、抽象化部分と実装部分が独立し、システムが階層設計を実行できるようになり、システムの構造が向上します。
2)システムの高レベル部分については、抽象部分と実装部分の間のインターフェースを知る必要があるだけであり、他の部分は特定のビジネスによって完成されます。
3)ブリッジングモデルは、マルチレイヤー継承スキームに置き換わるものであり、サブクラスの数を減らし、システムの管理および保守コストを削減できます。
4)ブリッジモードの導入により、システムの理解と設計が難しくなります。抽象化レイヤーで集約関係が確立されるため、開発者は抽象化のための設計とプログラミングを行う必要があります。
5)ブリッジモードでは、システム内で独立して変化する2つの次元を正しく識別する必要があるため、その使用範囲には一定の制限があります。つまり、このようなアプリケーションシナリオが必要です。