1. 程式人生 > 實用技巧 >java23種設計模式-結構型模式-橋接模式

java23種設計模式-結構型模式-橋接模式

一、定義

橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種型別的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。

這種模式涉及到一個作為橋接的介面,使得實體類的功能獨立於介面實現類。這兩種型別的類可被結構化改變而互不影響。

二、優點及缺點

優點:

1、抽象和實現的分離。

2、優秀的擴充套件能力。

3、實現細節對客戶透明。

缺點:

1、橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與程式設計。

三、程式碼實現:

介面類:

package com.example.demo.sjms.qiaojiemoshi;

/** * @Author: caesar * @Date:2020年10月20日 17:10:39 * @Description: 介面類 */ public interface ClassInterface { public void println(); }

兩個介面類:

package com.example.demo.sjms.qiaojiemoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月20日 17:10:02
 *  @Description: classA
 */
public class ClassA implements ClassInterface{
    @Override
    
public void println() { System.out.println("這是ClassA的方法!!!"); } }

package com.example.demo.sjms.qiaojiemoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月20日 18:10:11
 *  @Description: classB
 */
public class ClassB implements ClassInterface{
    @Override
    public void println() {
        System.out.println(
"這是classB!!!"); } }

橋接抽象類:

package com.example.demo.sjms.qiaojiemoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月20日 17:10:09
 *  @Description: 橋樑模式抽象類
 */
public abstract class BridgeAbstract {
    private ClassInterface classInterface;
    public BridgeAbstract(ClassInterface classInterface){
        this.classInterface = classInterface;
    }
    public abstract void addPrintln();

}

橋接實現類:

package com.example.demo.sjms.qiaojiemoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月20日 17:10:42
 *  @Description: 橋樑類
 */
public class Bridge extends BridgeAbstract{
    public Bridge(ClassInterface classInterface){
        super(classInterface);
    }
    @Override
    public void addPrintln() {
        super.classInterface.println();
        System.out.println("這是橋樑類的實現方法!!!");
    }
}

測試:

package com.example.demo.sjms.qiaojiemoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月20日 18:10:06
 *  @Description: 測試類
 */
public class Test {
    public static void main(String[] args) {
        ClassInterface classA = new ClassA();
        ClassInterface classB = new ClassB();
        BridgeAbstract bridgeA = new Bridge(classA);
        BridgeAbstract bridgeB = new Bridge(classA);
        bridgeA.addPrintln();
        bridgeB.addPrintln();
    }
}

四、原始碼級別

五、總結

使用場景:如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的繼承聯絡,通過橋接模式可以使它們在抽象層建立一個關聯關係。