目次
はじめに
抽象インターフェイスを通じてオブジェクト間の関係を管理することは、オブジェクト指向プログラミングの原則により一致しており、システムの保守と管理が容易になります。理解します。
アプリケーション シナリオ
動的に切り替える必要がある場合実行時の実装では、ブリッジ モードを使用してこの切り替えを実現できます。
ホームページ Java &#&チュートリアル Java ブリッジ設計パターンを使用して抽象化を実装からエレガントに分離する方法

Java ブリッジ設計パターンを使用して抽象化を実装からエレガントに分離する方法

May 24, 2023 pm 06:16 PM
java

はじめに

Java ブリッジ パターン (ブリッジ パターンとも呼ばれます) (ブリッジ パターン) は、抽象化と実装を独立して変更できるように分離する設計パターンです。一連の密接に関連したクラスを 2 つの個別の階層に分割し、1 つは抽象クラスまたはインターフェイスを含み、もう 1 つは実装クラスを含みます。ブリッジ パターンでは、抽象クラスと実装クラスを独立して変更できるため、疎結合が実現されます。

## Java では、ブリッジ パターンは通常、インターフェイスを使用して抽象部分を定義し、抽象クラスを使用して部分的な実装を実装し、それらを組み合わせて結合します。抽象部分には、参照の一部を実装する場合のみが含まれます。実装部分はインターフェイスを実装します。

Java ブリッジ モードは次の 4 つの役割に分かれています。

  • 抽象化役割 (Abstraction) : 抽象化されたインターフェイスを定義し、参照を維持します。

    ##拡張抽象ロール (洗練された抽象化): 拡張抽象ロール (通常は抽象ロールのサブクラス) は、抽象ロールにビジネス メソッドを実装します。
  • # 実装ロール (実装者): 実装ロールのインターフェイスを定義します。このインターフェイスは、抽象ロールのインターフェイスと完全に一致している必要はありません。実際、これら 2 つのインターフェイスは完全に異なっていてもかまいません。

  • #具体的な実装者: 具体的な実装者は、実装されたロール インターフェイスを実装し、特定のビジネス ロジックを完成させます。
  • #実装
  • #たとえば、次のようになります。電子商取引 Web サイトでは、Alipay、WeChat 支払い、UnionPay 支払いなどの複数のサポート方法をサポートする必要がある場合があります。ブリッジ モードを使用すると、ユーザーのニーズに合わせてさまざまな支払い方法を簡単に追加または切り替えることができます。

    実装役割
  • public interface PaymentImplementor {
        /**
         * 支付
         *
         * @param amount
         */
        void processPayment(double amount);
    }
    ログイン後にコピー
具体的な実装の役割

public class AliPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("支付宝支付:" + amount + "元...");
    }
}
public class WechatPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("微信支付:" + amount + "元...");
    }
}
public class UnionpayPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("银联支付:" + amount + "元...");
    }
}
ログイン後にコピー

抽象的な役割

public abstract class Payment {
    protected PaymentImplementor implementor;
    public Payment(PaymentImplementor implementor) {
        this.implementor = implementor;
    }
    /**
     * 支付
     *
     * @param amount
     */
    public abstract void pay(double amount);
}
ログイン後にコピー

拡張された抽象的な役割

public class OnlinePayment extends Payment{
    public OnlinePayment(PaymentImplementor implementor) {
        super(implementor);
    }
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void pay(double amount) {
        System.out.println("开始在线支付...");
        implementor.processPayment(amount);
        System.out.println("在线支付完成...");
    }
}
ログイン後にコピー

テスト

public class Demo {
    public static void main(String[] args) {
        // 支付宝支付
        PaymentImplementor paymentImplementor = new AliPaymentImplementor();
        Payment payment = new OnlinePayment(paymentImplementor);
        payment.pay(100);
        System.out.println();
        // 微信支付
        paymentImplementor = new WechatPaymentImplementor();
        payment = new OnlinePayment(paymentImplementor);
        payment.pay(101);
        System.out.println();
        // 银联支付
        paymentImplementor = new UnionpayPaymentImplementor();
        payment = new OnlinePayment(paymentImplementor);
        payment.pay(102);
    }
}
ログイン後にコピー

このコードは、ブリッジ パターンを実装する簡単な例です。そのうち、Payment は抽象クラス、OnlinePayment はそのサブクラス、PaymentImplementor はインターフェイス、AliPaymentImplementor、UnionpayPaymentImplementor、WechatPaymentImplementor はすべてその実装クラスです。このように、 Payment クラスの PayImplementor インターフェイスは分離されており、独立して開発および拡張できます。

この例では、Payment クラスは抽象的でインスタンス化できませんが、OnlinePayment サブクラスを通じてインスタンス化されます。OnlinePayment サブクラスは pay メソッドをオーバーライドします。そして、PaymentImplementor インターフェイスを実装するクラスから派生したimplementor.processPayment メソッドを呼び出します。ああ、たとえば、AliPaymentImplementor、UnionpayPaymentImplementor、WechatPaymentImplementor です。このメソッドを使用すると、PaymentImplementor インターフェイスの実装クラスを OnlinePayment クラスに動的に挿入できます。これにより、OnlinePayment クラスを変更せずにさまざまな支払い方法を実現できます。

概要

Java ブリッジ設計パターンを使用して抽象化を実装からエレガントに分離する方法利点

抽象部分と実装部分を分離して、独立して変更できるようにします。これにより、システムの柔軟性とスケーラビリティが向上します。

抽象インターフェイスを通じてオブジェクト間の関係を管理することは、オブジェクト指向プログラミングの原則により一致しており、システムの保守と管理が容易になります。理解します。

  • ブリッジ パターンは継承の使用を回避できます。クラス爆発の問題は、組み合わせ関係を使用しているように見えるため発生します。

  • 欠点

  • ブリッジ モードではシステムの複雑さが増し、追加の抽象化レイヤーが必要になります。抽象化レイヤーにより、システム設計が複雑になる可能性があります。ブリッジ インターフェイスと実装クラスが適切に設計されていない場合、システムの結合が増加する可能性があります。

アプリケーション シナリオ

  • クラスが複数ある場合寸法を変更する場合 (たとえば、シェイプ クラスの色やサイズが異なる場合)、ブリッジ パターンを使用してそれらを分離し、システムをより柔軟にすることができます。

  • さまざまなサイズをサポートする必要がある場合プラットフォーム、データベース、またはプロトコルに応じて、ブリッジ パターンを使用してこれらの実装の詳細をカプセル化し、クライアントと実装の部分を相互に影響を与えることなく個別に変更できるようにします。

動的に切り替える必要がある場合実行時の実装では、ブリッジ モードを使用してこの切り替えを実現できます。

以上がJava ブリッジ設計パターンを使用して抽象化を実装からエレガントに分離する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles