検索
ホームページJava&#&チュートリアル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 までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール