欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GoLang橋接模式的實(shí)現(xiàn)示例

 更新時(shí)間:2022年01月10日 10:26:55   作者:robin·張  
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,通過(guò)橋接模式可以將抽象部分和它的實(shí)現(xiàn)部分分離,本文主要介紹了GoLang橋接模式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,通過(guò)橋接模式可以將抽象部分和它的實(shí)現(xiàn)部分分離。這看著有點(diǎn)兒奇怪,接下來(lái)會(huì)作詳細(xì)說(shuō)明。

橋接模式建議將一個(gè)較大的類拆分成兩中角色。

  • 抽象角色 - 抽象角色是一個(gè)接口。它的子類也被稱為修正抽象角色。抽象角色包含一個(gè)對(duì)實(shí)現(xiàn)角色的引用。
  • 實(shí)現(xiàn)角色 - 實(shí)現(xiàn)角色也是一個(gè)接口。實(shí)現(xiàn)角色的子類被稱為具化實(shí)現(xiàn)角色。

這樣分層的優(yōu)勢(shì)在于在調(diào)用抽象角色的時(shí)候不需要考慮實(shí)現(xiàn)層的內(nèi)容。

舉個(gè)例子,假設(shè)我們手上有兩部筆記本:Mac本和Windows本;同時(shí)也有兩部打印機(jī):愛(ài)普生(Epson)打印機(jī)和惠普(Hp)打印機(jī)。我們希望筆記本和打印機(jī)能任意組合來(lái)完成工作,用戶只通過(guò)筆記本進(jìn)行操作而無(wú)需關(guān)心打印機(jī)是如何工作的。

這個(gè)例子中有2×2四種組合,但是不需要為此創(chuàng)建四個(gè)struct,而是創(chuàng)建兩層:

  • 抽象層
  • 實(shí)現(xiàn)層

看下下面的圖。在圖中可以看到抽象層(這里是computer)和實(shí)現(xiàn)層(這里是printer)通過(guò)抽象層中對(duì)實(shí)現(xiàn)層的引用來(lái)進(jìn)行交互,這個(gè)引用就是橋接模式所謂的橋梁。通過(guò)橋接模式,抽象層和引用層可以分別獨(dú)立實(shí)現(xiàn)而不互相影響。

注意圖中win和mac是如何嵌入printer的引用的:這里綁定的是printer接口,而非是priter的具體實(shí)現(xiàn)。這樣就可以在運(yùn)行時(shí)修改printer的值。如前面所說(shuō),printer引用在這里扮演了一個(gè)橋梁的角色,并實(shí)現(xiàn)了computer和printer的松耦合。

橋接模式的UML圖如下:

接下來(lái)是前面的例子的代碼。

抽象角色,computer.go:

type computer interface {
 
    print()
 
    setPrinter(printer)
}

修正抽象角色1,win.go

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
}

修正抽象角色2,mac.go

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
}

實(shí)現(xiàn)角色,printer.go

type printer interface {
    printFile()
}

具體實(shí)現(xiàn)角色1,epson.go

import "fmt"
 
type epson struct {
}
 
func (p *epson) printFile() {
    fmt.Println("Printing by a EPSON Printer")
}

具體實(shí)現(xiàn)角色2,hp.go

type hp struct {
}
 
func (p *hp) printFile() {
    fmt.Println("Printing by a HP Printer")
}

Client, main.go

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()
}

輸出內(nèi)容:

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

代碼已上傳至GitHub:zhyea / go-patterns / bridge-pattern

到此這篇關(guān)于GoLang橋接模式的文章就介紹到這了,更多相關(guān)GoLang 橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版)

    Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版)

    這篇文章主要介紹了Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Go語(yǔ)言實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)簡(jiǎn)單分布式系統(tǒng)

    Go語(yǔ)言實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)簡(jiǎn)單分布式系統(tǒng)

    如今很多云原生系統(tǒng)、分布式系統(tǒng),例如?Kubernetes,都是用?Go?語(yǔ)言寫的,這是因?yàn)?Go?語(yǔ)言天然支持異步編程。本篇文章將介紹如何用?Go?語(yǔ)言編寫一個(gè)簡(jiǎn)單的分布式系統(tǒng),需要的小伙伴開業(yè)跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • 使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法

    使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法

    go語(yǔ)言web框架挺多的,本文就介紹了一下如何使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用Golang的channel交叉打印兩個(gè)數(shù)組的操作

    使用Golang的channel交叉打印兩個(gè)數(shù)組的操作

    這篇文章主要介紹了使用Golang的channel交叉打印兩個(gè)數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang熔斷器的開發(fā)過(guò)程詳解

    Golang熔斷器的開發(fā)過(guò)程詳解

    Golang熔斷器是一種用于處理分布式系統(tǒng)中服務(wù)調(diào)用的故障保護(hù)機(jī)制,它可以防止故障服務(wù)的連鎖反應(yīng),提高系統(tǒng)的穩(wěn)定性和可靠性,本文將給大家詳細(xì)的介紹一下Golang熔斷器的開發(fā)過(guò)程,需要的朋友可以參考下
    2023-09-09
  • 淺析Go中序列化與反序列化的基本使用

    淺析Go中序列化與反序列化的基本使用

    序列化是指將對(duì)象轉(zhuǎn)換成字節(jié)流,從而存儲(chǔ)對(duì)象或?qū)?duì)象傳輸?shù)絻?nèi)存、數(shù)據(jù)庫(kù)或文件的過(guò)程,反向過(guò)程稱為“反序列化”。本文主要介紹了Go中序列化與反序列化的基本使用,需要的可以參考一下
    2023-04-04
  • Go并發(fā)讀寫文件、分片寫、分片下載文件的實(shí)現(xiàn)示例

    Go并發(fā)讀寫文件、分片寫、分片下載文件的實(shí)現(xiàn)示例

    讀寫文件在很多項(xiàng)目中都可以用到,本文主要介紹了Go并發(fā)讀寫文件、分片寫、分片下載文件的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Golang中的四個(gè)括號(hào)示例詳解

    Golang中的四個(gè)括號(hào)示例詳解

    這篇文章主要介紹了Golang中的四個(gè)括號(hào),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),通過(guò)實(shí)例代碼補(bǔ)充介紹了有效的括號(hào)golang實(shí)現(xiàn),需要的朋友可以參考下
    2024-03-03
  • Golang技巧之重試機(jī)制詳解

    Golang技巧之重試機(jī)制詳解

    重試機(jī)制是一種在程序執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤后重新嘗試執(zhí)行程序的一種機(jī)制,可以減少程序運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤,從而提高程序的可靠性,本文就來(lái)講講Golang中是如何實(shí)現(xiàn)重試機(jī)制的吧
    2023-05-05
  • 詳解golang函數(shù)多返回值錯(cuò)誤處理與error類型

    詳解golang函數(shù)多返回值錯(cuò)誤處理與error類型

    這篇文章主要為大家詳細(xì)介紹了golang中函數(shù)多返回值錯(cuò)誤處理與error類型的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)吧
    2023-10-10

最新評(píng)論