GoLang設計模式19 橋接模式

2022-09-10 16:24:16 字數 2114 閱讀 1111

橋接模式是一種結構型設計模式,通過橋接模式可以將抽象部分和它的實現部分分離。這看著有點兒奇怪,接下來會作詳細說明。

橋接模式建議將乙個較大的類拆分成兩中角色。

這樣分層的優勢在於在呼叫抽象角色的時候不需要考慮實現層的內容。

舉個例子,假設我們手上有兩部筆記本:mac本和windows本;同時也有兩部印表機:愛普生(epson)印表機和惠普(hp)印表機。我們希望筆記本和印表機能任意組合來完成工作,使用者只通過筆記本進行操作而無需關心印表機是如何工作的。

這個例子中有2×2四種組合,但是不需要為此建立四個struct,而是建立兩層:

看下下面的圖。在圖中可以看到抽象層(這裡是computer)和實現層(這裡是printer)通過抽象層中對實現層的引用來進行互動,這個引用就是橋接模式所謂的橋梁。通過橋接模式,抽象層和引用層可以分別獨立實現而不互相影響。

注意圖中win和mac是如何嵌入printer的引用的:這裡繫結的是printer介面,而非是priter的具體實現。這樣就可以在執行時修改printer的值。如前面所說,printer引用在這裡扮演了乙個橋梁的角色,並實現了computer和printer的松耦合。

橋接模式的uml圖如下:

接下來是前面的例子的**。

抽象角色,computer.go:

type computer inte***ce
修正抽象角色1,win.go

import "fmt"

type windows struct

func (w *windows) print()

func (w *windows) setprinter(p printer)

修正抽象角色2,mac.go

import "fmt"

type mac struct

func (m *mac) print()

func (m *mac) setprinter(p printer)

實現角色,printer.go

type printer inte***ce
具體實現角色1,epson.go

import "fmt"

type epson struct

func (p *epson) printfile()

具體實現角色2,hp.go

type hp struct 

func (p *hp) printfile()

client, main.go

func main() 

epsonprinter := &epson{}

maccomputer := &mac{}

maccomputer.setprinter(hpprinter)

maccomputer.print()

fmt.println()

maccomputer.setprinter(epsonprinter)

maccomputer.print()

fmt.println()

wincomputer := &windows{}

wincomputer.setprinter(hpprinter)

wincomputer.print()

fmt.println()

wincomputer.setprinter(epsonprinter)

wincomputer.print()

fmt.println()

}

輸出內容:

print request for mac

printing by a hp printer

print request for mac

printing by a epson printer

print request for windows

printing by a hp printer

print request for windows

printing by a epson printer

end!

設計模式 19)橋接模式

硬體抽象類 abstract class handsetbrand public void removesoftware handsetsoftware soft public abstract void run class hansetbrandm handsetbrand class hanse...

設計模式 橋接

堅持並養成習慣,不為有趣真的好難。越是放棄就越多藉口不堅持。橋接模式 思路 分離抽象部分和實現部分,重在相互獨立。多個維度多個變化,不同版本不同型別響應都不同。它就是做 個性化 適應各種要求做出調整。好處 靈活 減低耦合 提高擴充套件性。場景 外掛程式開發 元件開發 首先我們定義兩個類 普通資訊彈窗...

設計模式 橋接模式

橋接模式 多維 如車行駛在路上。車分各種品牌 各種型號各種排氣 道路分街道 告訴 山地等 駕駛員分男女 為了減少類的數量。如果按照繼承實現會照成大量冗餘的類,類的數量會相當之大 package com.cn.duduyu.bridgepattern.car public abstract class...