設計模式-結構型之橋接(bridge)模式

定義

  • 將類的功能層次結構與實現層次結構分離。
  • 功能層次結構:
    – 當我們需要新增加一個功能時,通常我們會新增一個子類,當還需要增加功能,我們在現在子類上增加一個子類,這種繼承樹的延伸稱作類的功能層次結構。
  • 實現層次結構:
    – 當功能相似時,我們會基於抽象層新增一個實現類,當還有相似時,我們會繼續增加新的實現,這種橫向增加新的實現類稱作類的實現層次結構。

使用場景,

  • 將類的功能層次結構和類的實現層次結構分離開來。
  • 舉例:如手機,最開始只能夠打電話,照相(像素),不同大小,當需要新增功能(短信、郵件)時,新增實現類MiPhone;不同型號的手機有不同的像素和大小等特點,只需在右邊添加新的實現,在手機抽象層中聚合了Feature。

UML圖

在這裏插入圖片描述

代碼實現

public class Phone {
	//充當橋樑:在功能結構層與實現結構層架起橋樑
    private Feature bridge;

    public Phone(Feature bridge) {
        this.bridge = bridge;
    }

    public void call(){
        System.out.println("打電話");
    }
    //使用委託
    public int pixel(){
        return bridge.pixel();
    }

    public int size(){
        return bridge.size();
    }
}
public interface Feature {
    //像素
    public int pixel();
    //大小
    public int size();
}
public class MiPhone extends Phone {

    public MiPhone(Feature bridge) {
        super(bridge);
    }

    public void message(){
        System.out.println("發送短信");
    }

    public void email(){
        System.out.println("發送郵件");
    }
}
public class FeatureImpl implements Feature {
    @Override
    public int pixel() {
        return 5000000;
    }

    @Override
    public int size() {
        return 80;
    }
}
//測試
public class Client {
    public static void main(String[] args) {
        MiPhone miPhone = new MiPhone(new FeatureImpl());
        miPhone.email();
        int size = miPhone.size();
        int pixel = miPhone.pixel();
    }
}

總結

  • 將類的功能層次結構與實現層次結構分離。
  • 使用繼承來達到功能層次結構;使用接口實現來達到實現層次結構;使用聚合將兩者關聯。
  • 符合開閉原則,易於擴展。
  • 符合依賴倒轉原則:依賴於 Feature 接口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章