iT邦幫忙

2021 iThome 鐵人賽

DAY 15
1

  今天要介紹的Bridge Pattern,當初在學習的時候就覺得這個 Pattern 很有意思,實用性感覺非常高,現在就帶你來認識它吧!


問題情境與解析

  現在有個交通工具的類別,底下的子類有汽車和機車,你希望加入道路行為的元素去建構不同的交通工具,並將各種道路行為汽車和機車創造了類別,像是會走上高架的機車與只會走平面道路的機車等等,之後如果要新增其他交通工具的子類別,比如說公車、腳踏車等等,就會需要分別對不同道路行為的交通工具塑造子類別,整個程式架構就會往橫向不斷發展,看起來會很糟。

  而橋接模式會將交通工具與道路規則給抽離,從原本的繼承關係到聚合關係來解決問題。也就是你可以取一個交通工具的類別,而它的道路行為就用引用的方式來實現,而不是封裝所有的狀態和行為在一個類別中。

  從上述了例子,我們可以發現,橋接模式把「抽象」與「實作」分開來,並讓「抽象」擁有「實作」,形成一個聚合的關係,而這樣的關係也被視為橋接模式定義的一部分。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20210930/20140743UFkw1KOcMy.png

Skeleton Code

abstract class Abstractation {
    protected Implementer impl;

    protected Abstractation(Implementer impl) {
        this.impl = impl;
    }

    abstract public Type function();
}

class RefinedAbstractation extends Abstractation {
    public RefinedAbstractation(Implementer impl) {
        super(impl);
    }

    public Type function() {
        impl.method();
        //other operation
    }
}

interface Implementer {
    abstract public Type method();
}

class ConcreteImplementer implements Implementer {	
    public Type method() {
        // Do some Work
    }
}

  使用橋接模式就可以將抽象與實作分離,讓兩者可以獨立變化,這也意味著開發者也方便分工。如果你想要組織和劃分具有某些功能(如道路行為)的多個變體(如交通工具),就可以使用橋接模式,來幫助你的程式能夠獨立的加入新的抽象和實作,並且使「抽象」與「實作」更專於自己本身的邏輯與細節,更加符合Single Responsibility Principle單一職責原則


除此之外,也歡迎大家走走逛逛關於我們團隊夥伴的文章

lu23770127 - SASS 基礎初學三十天

10u1 - 糟了!是世界奇觀!

juck30808 - Python - 數位行銷分析與 Youtube API 教學

SiQing47 - 前端?後端?你早晚都要全端的,何不從現在開始?


上一篇
IT鐵人DAY 14-Decorator 裝飾者模式
下一篇
IT鐵人DAY 16-Strategy 策略模式
系列文
淺談物件導向與Design Pattern介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言