Java ブリッジ モードの詳細な紹介

WBOY
リリース: 2022-05-01 09:00:23
転載
2542 人が閲覧しました

この記事では、java に関する関連知識を提供します。主にブリッジ モードに関連する問題を紹介します。ブリッジ モードでは、抽象化と実装が分離され、独立して変更できるため、抽象化が軽減されます。見てみましょう。これら 2 つの可変次元の結合度で、皆さんの役に立つことを願っています。

Java ブリッジ モードの詳細な紹介

推奨学習: 「Java ビデオ チュートリアル

実際には、2 つのクラスを持つことができるクラスがたくさんあります。以上 2 次元での変化。たとえば、グラフィックスを形状や色で分割できます。継承を使用すると、m 個の形状と n 色のグラフィックスが m*n 種類存在します。対応するサブカテゴリが多数あるだけでなく、拡張比較の難易度。

たとえば、さまざまな色やフォントのテキスト、さまざまなブランドやメーカーの車、さまざまな性別や職業の男性と女性、さまざまなプラットフォームやさまざまなファイル形式をサポートするメディア プレーヤーなどです。これらの問題は、ブリッジ モードを使用するとうまく解決できます。


1. ブリッジ モードの定義

抽象化と実装を分離し、独立して変更できるようにします。継承関係ではなく組み合わせ関係を使用して実装されるため、抽象化と実装の 2 つの可変次元の結合度が減少します。

パターン タイプ: 構造設計パターン

#原理クラス図:
Java ブリッジ モードの詳細な紹介
原理クラス図の説明:

  1. クライアント クラス:ブリッジ モード 呼び出し元
  2. #Abstract クラス (Abstraction): は Implementor、つまりその実装クラス ConcretelmplementorA を維持します...この 2 つは結合された関係にあり、Abstraction はブリッジとして機能します
  3. RehinedAbstraction: は、抽象化抽象クラス lplementor: 動作実装クラスのインターフェイス
  4. ConcretelmplementorA/B: 動作の具象実装クラス## のサブクラスです。
  5. #UML 図より: ここでの抽象クラスとインターフェイスは集約関係にあり、実際には、呼び出しと呼び出される間の関係が

2 です。ブリッジモードの長所と短所

利点:

    抽象化と実装の分離、強力な拡張性
  1. オープンの原則に準拠最後に
  2. #合成と再利用の原則に準拠
  3. 実装の詳細は顧客に透過的
#欠点:

##集計関係は抽象化層で確立されるため、開発者は抽象化をターゲットにする必要があります。システム内で独立して変化する 2 つの次元を正確に識別できるため、システムの理解と設計がさらに難しくなります。
  • 3. ブリッジ モードの構造

ブリッジ パターンには、次の主な役割が含まれます:

抽象化の役割:
    抽象クラスを定義し、実装オブジェクトを含みます。 参照
  1. 拡張抽象化 (洗練された抽象化) ロール
  2. : 抽象ロールのサブクラスであり、親クラスのビジネス メソッドを実装します。と、組み合わせ関係を通じて実装されたロールのビジネス メソッドを呼び出します。
  3. Implementor ロール: 実装されたロールのインターフェイスを定義します。これは、抽象ロール呼び出し
  4. 具体的な Implementor ロールを拡張するために使用されます。実装されたロール インターフェイスの具体的な実装を示します。
  5. 構造図:

この構造図の実装コード: Java ブリッジ モードの詳細な紹介
実現された役割:

/**
 * 实视化角色
 */public interface Implemntor {

    public void OperationImpl();}
ログイン後にコピー
具体的に実現された役割:

/**
 * 具体实现化角色
 */public class ConcreteImplementorA implements Implemntor{
    @Override
    public void OperationImpl() {
        System.out.println("具体实现化角色被访问");
    }}
ログイン後にコピー
抽象的な役割:

/**
 * 抽象化角色
 */public abstract class Abstraction {

    protected Implemntor implemntor;

    protected Abstraction(Implemntor implemntor){
        this.implemntor = implemntor;
    }

    public abstract void Operation();}
ログイン後にコピー
拡張抽象ロール:

/**
 * 扩展抽象化角色
 */public class RefinedAbstraction extends Abstraction{

    protected RefinedAbstraction(Implemntor implemntor) {
        super(implemntor);
    }

    public void Operation(){
        System.out.println("扩展抽象化角色被访问");
        implemntor.OperationImpl();
    }}
ログイン後にコピー
#テスト クラス:
public class Test {
    public static void main(String[] args) {

        Implemntor implemntor = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(implemntor);
        abs.Operation();

    }}
ログイン後にコピー

出力:

扩展抽象化角色被访问
具体实现化角色被访问
ログイン後にコピー

4. ブリッジ モードの実装例


#実装と抽象化を 2 つの異なるクラス レベルに配置し、2 つのレベルを独立して変更できるようにします

車が道路を走行するときの変化には 2 つの側面があります。車の種類が異なります、そして

道路もセメント道路とアスファルト道路に分かれます

写真:

#交通手段の種類:
#

/**
 * 交通工具类
 */public interface Vehicle {

    public void drive();}
ログイン後にコピー
Java ブリッジ モードの詳細な紹介#具体的な交通手段: 車

/**
 * 具体的交通工具:小汽车
 */public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("小汽车");
    }}
ログイン後にコピー
具体的な交通手段: バス

/**
 * 具体的交通工具:大巴车
 */public class Bus implements Vehicle{
    @Override
    public void drive() {
        System.out.println("大巴车");
    }}
ログイン後にコピー
抽象的な道路:

/**
 * 抽象的路
 */public abstract class Road {

    protected Vehicle vehicle;

    public Road(Vehicle vehicle){
        this.vehicle = vehicle;
    }

    public abstract void driveOnRoad();}
ログイン後にコピー
具体的な道路: アスファルト道路

/**
 * 具体的路:油柏路
 */public class UnpavedRoad extends Road{
    public UnpavedRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {

        super.vehicle.drive();
        System.out.println("行驶在油柏路");
    }}
ログイン後にコピー
特定の道路: セメント道路

/**
 * 具体的路:水泥路
 */public class CementRoad extends Road{
    public CementRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("行驶在水泥路");
    }}
ログイン後にコピー
テスト クラス:

//测试public class Test {
    public static void main(String[] args) {

        Road roadCar = new CementRoad(new Car());
        roadCar.driveOnRoad();

        Road roadBus = new CementRoad(new Bus());
        roadBus.driveOnRoad();

    }}
ログイン後にコピー
出力 :

小汽车
行驶在水泥路
大巴车
行驶在水泥路
ログイン後にコピー

5、桥接模式的注意事项

  1. 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统
  2. 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成
  3. 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本
  4. 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
  5. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景

6、桥接模式应用场景

对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.

推荐学习:《java视频教程

以上がJava ブリッジ モードの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!