この記事では、主に Java デザイン パターンのブリッジ モードを紹介し、ブリッジ モードの概念、機能、実装方法、および関連する注意事項をサンプル形式で詳しく説明します。 Java 設計パターンと例。参考として、以下のように全員と共有してください:
コンセプト:ブリッジパターン: 抽象部分を実装部分から分離し、独立して変更できるようにします。
ブリッジ モードは、継承関係を関連付け関係に変換することで、クラス間の結合を減らし、コードの記述量を減らします。
ブリッジモードはいつ使用しますか?簡単に言うと、オブジェクトの特性を抽象化すると、オブジェクトの特性属性が非常に抽象化されるため、属性を再度抽象化する必要があります。
そうしないと、特定のサブクラスの数が幾何級数的に増加し、拡張することが困難になります。既存のコードを保守する方法はありません。
たとえば、携帯電話の 2 つのオブジェクトを抽象化すると、オペレーティング システム、CPU、画面、オペレーター ネットワークなど、その属性のいくつかは非常に複雑になります。これらの属性を直接定義することはできず、再度抽象化する必要があります。特定の携帯電話オブジェクトはこれらの属性の組み合わせですが、単純な組み合わせではなく、属性が属性として独自の機能を実現する必要があります。このような設計では、コードの保守と拡張が容易になります。
注:このモデルについて話すとき、私が言ったり書いたりする例が正しいかどうかは保証できません。結局のところ、私はこのモデルについては初めてであり、すべての例は個人的な理解に基づいています。 私が考えるブリッジモードの説明図:
以下は例です:
1. まず抽象クラス、abstractを定義し、オブジェクトの特性を記述します。
将来のブリッジングと拡張のために、オブジェクトのプロパティの次元を分割します。
package test.design.bridge; public abstract class CellPhone { private String cellPhoneName; public CellPhoneSystem cellPhoneSystem; public CellPhoneCPU cellPhoneCPU; public void works(){ System.out.println("---------------------"); System.out.println("This cellphone is:"+this.getCellPhoneName()+",welcome to use. "); System.out.println("This cellphone detail infomation:"); System.out.println("系统类型:"+this.getCellPhoneSystem().getSystemName()); System.out.println("cpu型号:"+this.getCellPhoneCPU().getCpuName()); System.out.println("---------------------"); } public String getCellPhoneName() { return cellPhoneName; } public void setCellPhoneName(String cellPhoneName) { this.cellPhoneName = cellPhoneName; } public CellPhoneSystem getCellPhoneSystem() { return cellPhoneSystem; } public void setCellPhoneSystem(CellPhoneSystem cellPhoneSystem) { this.cellPhoneSystem = cellPhoneSystem; } public CellPhoneCPU getCellPhoneCPU() { return cellPhoneCPU; } public void setCellPhoneCPU(CellPhoneCPU cellPhoneCPU) { this.cellPhoneCPU = cellPhoneCPU; } }
2. 属性次元の抽象化。 (インターフェース定義を使用できます。キーは特定の機能に応じて異なります)
package test.design.bridge; /** * 属性cpu被抽象成一个维度,为了以后扩展 * @author lushuaiyin * */ public abstract class CellPhoneCPU { public CellPhone cellPhone; public String cpuName; public void cpuWorks(){ System.out.println("I am cpu. My pattern is:"+this.getCpuName()); System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName()); } public CellPhone getCellPhone() { return cellPhone; } public void setCellPhone(CellPhone cellPhone) { this.cellPhone = cellPhone; this.getCellPhone().setCellPhoneCPU(this);// 装配(桥接,或者可以认为对象类与其属性类的传递) } public String getCpuName() { return cpuName; } public void setCpuName(String cpuName) { this.cpuName = cpuName; } }
package test.design.bridge; /** * 属性操作系统被抽象成一个维度,为了以后扩展 * @author lushuaiyin * */ public abstract class CellPhoneSystem { public CellPhone cellPhone; public String SystemName; public void systemWorks(){ System.out.println("I am "+this.getSystemName()+" system."); System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName()); } public CellPhone getCellPhone() { return cellPhone; } public void setCellPhone(CellPhone cellPhone) { this.cellPhone = cellPhone; this.getCellPhone().setCellPhoneSystem(this);// 装配(桥接,或者可以认为对象类与其属性类的传递) } public String getSystemName() { return SystemName; } public void setSystemName(String systemName) { SystemName = systemName; } }
3. 特定のディメンション属性オブジェクト。
ここでは、オペレーティング システムの属性と CPU の属性にそれぞれ 2 つの特定のオブジェクトを定義します。
次元を拡張する必要がある場合に、次元を拡張する方法について説明します。
携帯電話オブジェクトを定義します
package test.design.bridge; public class AndroidSystem extends CellPhoneSystem{ }メイン関数をテストします
package test.design.bridge; public class IOSSystem extends CellPhoneSystem{ }
拡張する必要がある場合は、新しい次元属性を定義します
package test.design.bridge; /** * 双核cpu * @author Administrator * */ public class TwoCore extends CellPhoneCPU{ }
package test.design.bridge; /** * 四核cpu * @author Administrator * */ public class FourCore extends CellPhoneCPU{ }
テスト印刷;
りー
以上がJavaデザインパターンにおけるブリッジモードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
