今天要介紹的Bridge Pattern,當初在學習的時候就覺得這個 Pattern 很有意思,實用性感覺非常高,現在就帶你來認識它吧!
現在有個交通工具的類別,底下的子類有汽車和機車,你希望加入道路行為的元素去建構不同的交通工具,並將各種道路行為汽車和機車創造了類別,像是會走上高架的機車與只會走平面道路的機車等等,之後如果要新增其他交通工具的子類別,比如說公車、腳踏車等等,就會需要分別對不同道路行為的交通工具塑造子類別,整個程式架構就會往橫向不斷發展,看起來會很糟。
而橋接模式會將交通工具與道路規則給抽離,從原本的繼承關係到聚合關係來解決問題。也就是你可以取一個交通工具的類別,而它的道路行為就用引用的方式來實現,而不是封裝所有的狀態和行為在一個類別中。
從上述了例子,我們可以發現,橋接模式把「抽象」與「實作」分開來,並讓「抽象」擁有「實作」,形成一個聚合的關係,而這樣的關係也被視為橋接模式定義的一部分。
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單一職責原則。
除此之外,也歡迎大家走走逛逛關於我們團隊夥伴的文章
juck30808 - Python - 數位行銷分析與 Youtube API 教學
SiQing47 - 前端?後端?你早晚都要全端的,何不從現在開始?