Golang設(shè)計(jì)模式中的橋接模式詳細(xì)講解
橋接模式
橋接是一種結(jié)構(gòu)型設(shè)計(jì)模式, 可將業(yè)務(wù)邏輯或一個(gè)大類(lèi)拆分為不同的層次結(jié)構(gòu), 從而能獨(dú)立地進(jìn)行開(kāi)發(fā)。
層次結(jié)構(gòu)中的第一層 (通常稱(chēng)為抽象部分) 將包含對(duì)第二層 (實(shí)現(xiàn)部分) 對(duì)象的引用。 抽象部分將能將一些 (有時(shí)是絕大部分) 對(duì)自己的調(diào)用委派給實(shí)現(xiàn)部分的對(duì)象。 所有的實(shí)現(xiàn)部分都有一個(gè)通用接口, 因此它們能在抽象部分內(nèi)部相互替換。

概念示例
假設(shè)你有兩臺(tái)電腦: 一臺(tái) Mac 和一臺(tái) Windows。 還有兩臺(tái)打印機(jī): 愛(ài)普生和惠普。 這兩臺(tái)電腦和打印機(jī)可能會(huì)任意組合使用。 客戶(hù)端不應(yīng)去擔(dān)心如何將打印機(jī)連接至計(jì)算機(jī)的細(xì)節(jié)問(wèn)題。
如果引入新的打印機(jī), 我們也不會(huì)希望代碼量成倍增長(zhǎng)。 所以, 我們創(chuàng)建了兩個(gè)層次結(jié)構(gòu), 而不是 2x2 組合的四個(gè)結(jié)構(gòu)體:
抽象層: 代表計(jì)算機(jī)
實(shí)施層: 代表打印機(jī)
這兩個(gè)層次可通過(guò)橋接進(jìn)行溝通, 其中抽象層 (計(jì)算機(jī)) 包含對(duì)于實(shí)施層 (打印機(jī)) 的引用。 抽象層和實(shí)施層均可獨(dú)立開(kāi)發(fā), 不會(huì)相互影響。
computer.go: 抽象
package main
type Computer interface {
Print()
SetPrinter(Printer)
}
mac.go: 精確抽象
package main
import "fmt"
type Mac struct {
printer Printer
}
func (m *Mac) Print() {
fmt.Println("Print request for mac")
m.printer.PrintFile()
}
func (m *Mac) SetPrinter(p Printer) {
m.printer = p
}windows.go: 精確抽象
package main
import "fmt"
type Windows struct {
printer Printer
}
func (w *Windows) Print() {
fmt.Println("Print request for windows")
w.printer.PrintFile()
}
func (w *Windows) SetPrinter(p Printer) {
w.printer = p
}
printer.go: 實(shí)施
package main
type Printer interface {
PrintFile()
}
epson.go: 具體實(shí)施
package main
import "fmt"
type Epson struct {
}
func (p *Epson) PrintFile() {
fmt.Println("Printing by a EPSON Printer")
}
hp.go: 具體實(shí)施
package main
import "fmt"
type Hp struct {
}
func (p *Hp) PrintFile() {
fmt.Println("Printing by a HP Printer")
}
main.go: 客戶(hù)端代碼
package main
import "fmt"
func main() {
hpPrinter := &Hp{}
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()
}
output.txt: 執(zhí)行結(jié)果
Print request for mac
Printing by a HP PrinterPrint request for mac
Printing by a EPSON PrinterPrint request for windows
Printing by a HP PrinterPrint request for windows
到此這篇關(guān)于Golang設(shè)計(jì)模式中的橋接模式詳細(xì)講解的文章就介紹到這了,更多相關(guān)Go橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang?pprof監(jiān)控memory?block?mutex統(tǒng)計(jì)原理分析
這篇文章主要為大家介紹了golang?pprof監(jiān)控memory?block?mutex統(tǒng)計(jì)原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Go操作Kafka的實(shí)現(xiàn)示例(kafka-go)
本文介紹了使用kafka-go庫(kù)在Go語(yǔ)言中與Kafka進(jìn)行交互,涵蓋了kafka-go的安裝、API使用、消息發(fā)送與消費(fèi)方法,以及如何通過(guò)DockerCompose快速搭建Kafka環(huán)境,文章還比較了其他兩個(gè)常用的Kafka客戶(hù)端庫(kù),感興趣的可以了解一下2024-10-10
go-redis Pipeline與事務(wù)的實(shí)現(xiàn)示例
本文介紹了Go-Redis v9中Pipeline、事務(wù)和Watch機(jī)制的使用方法與優(yōu)化實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
Go語(yǔ)言實(shí)現(xiàn)的排列組合問(wèn)題實(shí)例(n個(gè)數(shù)中取m個(gè))
這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)的排列組合問(wèn)題,結(jié)合實(shí)例形式分析了Go語(yǔ)言實(shí)現(xiàn)排列組合數(shù)學(xué)運(yùn)算的原理與具體操作技巧,需要的朋友可以參考下2017-02-02
純Go語(yǔ)言實(shí)現(xiàn)百萬(wàn)級(jí)數(shù)據(jù)高效導(dǎo)出Excel和CSV實(shí)戰(zhàn)指南
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)純Go語(yǔ)言實(shí)現(xiàn)百萬(wàn)級(jí)數(shù)據(jù)高效導(dǎo)出Excel和CSV的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下2025-09-09

