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 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); } }
利点
抽象部分と実装部分を分離して、独立して変更できるようにします。これにより、システムの柔軟性とスケーラビリティが向上します。
抽象インターフェイスを通じてオブジェクト間の関係を管理することは、オブジェクト指向プログラミングの原則により一致しており、システムの保守と管理が容易になります。理解します。
ブリッジ パターンは継承の使用を回避できます。クラス爆発の問題は、組み合わせ関係を使用しているように見えるため発生します。
欠点
ブリッジ モードではシステムの複雑さが増し、追加の抽象化レイヤーが必要になります。抽象化レイヤーにより、システム設計が複雑になる可能性があります。ブリッジ インターフェイスと実装クラスが適切に設計されていない場合、システムの結合が増加する可能性があります。
アプリケーション シナリオ
クラスが複数ある場合寸法を変更する場合 (たとえば、シェイプ クラスの色やサイズが異なる場合)、ブリッジ パターンを使用してそれらを分離し、システムをより柔軟にすることができます。
さまざまなサイズをサポートする必要がある場合プラットフォーム、データベース、またはプロトコルに応じて、ブリッジ パターンを使用してこれらの実装の詳細をカプセル化し、クライアントと実装の部分を相互に影響を与えることなく個別に変更できるようにします。
動的に切り替える必要がある場合実行時の実装では、ブリッジ モードを使用してこの切り替えを実現できます。
以上がJava ブリッジ設計パターンを使用して抽象化を実装からエレガントに分離する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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