橋梁模式 bridge

2021-08-29 06:26:59 字數 1448 閱讀 4117

橋梁模式的用意是將問題的抽象和實現分離開來實現,通過用聚合代替繼承來解決子類**性增長的問題。

比如我們有乙個畫圖程式 有2個圖形(circle rectangle )和2種畫圖方法(drawing1 drawing2)

圖形可能會使用drawing1來畫圖 也可能使用drawing2來畫圖

在這個畫圖程式中有兩個可變因素 乙個是圖形的種類 有可能會增加新的圖形 另乙個是畫圖方法 可能會有drawing3出現

[u]當系統有兩個可變因素時 我就應該考慮到橋梁模式,至少它應該在你的腦子裡閃過[/u]

在物件導向設計中有兩條重要原則

[b]1.找出變化並封裝之

2.優先使用聚合而不是繼承[/b]

這兩條將在橋梁模式中得到完美體現

在上例中圖形是乙個變化 我們可以抽象出乙個形狀介面 和 一些形狀類

[code]inte***ce shape

class circle implements shape{}

class rectangle implements shape{}[/code]

畫圖方法也可以抽象出乙個drawing介面 和 各種畫法

[code]inte***ce drawing

class drawing1 implements drawing{}

class drawing2 implements drawing{}[/code]

最後將兩個變化聯絡起來

在問題域中是圖形使用畫圖方法 所有應該在shape中使用drawing

我們可以通過在具體的圖形類中通過建構函式傳入具體的畫圖方法來實現

如下[code]class circle implements shape

public void dodrow()

}class client()

}[/code]

仔細體會了一下橋梁模式,感覺凡是『呼叫和實現』之間的問題都可以用橋梁模式解決

比如說dao層給service層之間的呼叫,service作為呼叫方 dao為實現方

只不過service層只有一種實現罷了,可以看作是一種簡化了的橋梁模

dao 可能有 hibernatedao jdbcdao。

service 使用dao

如下[code]inte***ce dao

class hibernateuserdao implements dao{}

class jdbcuserdao implements dao{}

inte***ce userservice

class userserviceimpl implements userservice

public list findalluser()

}[/code]

這個**是不是給上面的畫圖程式很類似呢

不同之處就是service層只有乙個實現userserviceimpl

所以說是這是一種簡化了的橋梁

橋梁 Bridge 模式

9 橋梁 bridge 模式 橋梁模式的結構圖 這個系統含有兩個等級結構 facade模式的角色 例項 抽象化角色 public abstract class abstaction 修正抽象化角色 public class refinedabstraction extends abstaction ...

設計模式 橋梁模式

定義抽象公司 public abstract class corp 上方是模板方法 下面是房地產公司 public class housecorp extends corp 賣房子 protected void sell 賺錢 public void makemoney 服裝公司 public cl...

橋梁模式 Bridge Pattern

橋接模式,將實現類和介面類拆分開來,不使用繼承,介面類 抽象類 持有乙個橋接類的引用,根據傳入的橋接實現類引用。這樣在改變橋接類的情況下就可以改變抽象類的執行結果。名詞類 抽象部分 public abstract class circle protected abstract void drawci...