首頁 > Java > java教程 > 主體

詳細介紹Java橋接模式

WBOY
發布: 2022-05-01 09:00:23
轉載
2539 人瀏覽過

本篇文章為大家帶來了關於java的相關知識,其中主要介紹了橋接模式的相關問題,橋接模式將抽象與實現分離,使它們可以獨立變化,降低了抽象和實現這兩個可變維度的耦合度,下面一起來看一下,希望對大家有幫助。

詳細介紹Java橋接模式

推薦學習:《java影片教學

其實在現實生活中,有很多類別可以有兩個或更多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m 種形狀和n 種顏色的圖形就有m*n 種,不但對應的子類很多,而且擴展比較困難。

例如不同顏色和字體的文字、不同品牌和功率的汽車、不同性別和職業的男女、支援不同平台和不同檔案格式的媒體播放器等。如果用橋接模式就能很好地解決這些問題。


1、橋接模式的定義

將抽象與實作分離,使它們可以獨立變更。它是用組合關係代替繼承關係來實現,從而降低了抽象化和實現這兩個可變維度的耦合度

模式類型:結構設計模式

原理類別圖:
詳細介紹Java橋接模式
原理類別圖表說明:

  1. #Client類別: 橋接模式的呼叫者
  2. 抽象類別(Abstraction) : 維護了Implementor/即它的實作類別ConcretelmplementorA…二者是器合關係,Abstraction充當橋接英
  3. #RehinedAbstraction: 是Abstraction抽象類別的子類別lmplementor:行為實作類別的介面
  4. ConcretelmplementorA/B: 行為的具體實作類別
  5. #從UML圖: 這裡的抽象類別和介面是聚合的關係,其實呼叫和被呼叫關係

2、橋接模式的優缺點

優點:

  1. 抽象與實作分離,擴展能力強
  2. #符合開閉原則
  3. #符合合成復用原則
  4. 其實作細節對客戶透明

缺點:

  • 由於聚合關係建立在抽象層,要求開發者針對抽象化進行設計與編程,能正確辨識系統中兩個獨立變化的維度,這增加了系統的理解與設計難度

##3、橋接模式的結構

橋接(Bridge)模式包含以下主要角色:

  1. 抽象化(Abstraction)角色: 定義抽象類,並包含一個對實作化物件的引用
  2. 擴展抽象化(Refined Abstraction)角色:是抽象角色的子類,實作父類別中的業務方法,並透過組合關係呼叫來實現角色中的業務方法
  3. 實現化(Implementor)角色:定義實現化角色的接口,供擴展抽象化角色調用
  4. 具體實現化(Concrete Implementor)角色:給出實現化角色接口的具體實現

結構圖:

詳細介紹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 、橋接模式的案例實作

將實作與抽象放在兩個不同的類別層次中,使兩個層次可以獨立改變

交通工具在路上行駛,這裡有兩個維度的變化,

交通工具的類型不同

路也分水泥路和柏油路

類圖:


詳細介紹Java橋接模式

交通工具類別:

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

    public void drive();}
登入後複製

具體的交通工具:小型汽車

#

/**
 * 具体的交通工具:小汽车
 */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中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!