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

Golang橋接模式講解和代碼示例

 更新時(shí)間:2023年06月20日 08:34:58   作者:demo007x  
橋接是一種結(jié)構(gòu)型設(shè)計(jì)模式,可將業(yè)務(wù)邏輯或一個(gè)大類(lèi)拆分為不同的層次結(jié)構(gòu),從而能獨(dú)立地進(jìn)行開(kāi)發(fā),本文將通過(guò)代碼示例詳細(xì)給大家介紹一下Golang橋接模式,需要的朋友可以參考下

層次結(jié)構(gòu)中的第一層 (通常稱為抽象部分) 將包含對(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ì)任意組合使用。 客戶端不應(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: 客戶端代碼

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 Printer

Print request for mac
Printing by a EPSON Printer

Print request for windows
Printing by a HP Printer

Print request for windows

以上就是Golang橋接模式講解和代碼示例的詳細(xì)內(nèi)容,更多關(guān)于Golang 橋接模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Go語(yǔ)言如何實(shí)現(xiàn)一個(gè)最簡(jiǎn)化的協(xié)程池

    詳解Go語(yǔ)言如何實(shí)現(xiàn)一個(gè)最簡(jiǎn)化的協(xié)程池

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言如何實(shí)現(xiàn)一個(gè)最簡(jiǎn)化的協(xié)程池,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴可以了解一下
    2023-10-10
  • Go語(yǔ)言中Timer計(jì)時(shí)器的使用技巧詳解

    Go語(yǔ)言中Timer計(jì)時(shí)器的使用技巧詳解

    Go語(yǔ)言中的time包里有個(gè)Timer計(jì)時(shí)器的功能,這篇文章主要就是來(lái)和大家介紹一下Timer計(jì)時(shí)器的使用技巧,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • Go實(shí)現(xiàn)跨平臺(tái)的藍(lán)牙聊天室示例詳解

    Go實(shí)現(xiàn)跨平臺(tái)的藍(lán)牙聊天室示例詳解

    這篇文章主要為大家介紹了Go實(shí)現(xiàn)跨平臺(tái)的藍(lán)牙聊天室示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang守護(hù)進(jìn)程用法示例分析

    Golang守護(hù)進(jìn)程用法示例分析

    這篇文章主要介紹了Golang守護(hù)進(jìn)程用法示例,創(chuàng)建守護(hù)進(jìn)程首先要了解go語(yǔ)言如何實(shí)現(xiàn)創(chuàng)建進(jìn)程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-05-05
  • 詳解Go語(yǔ)言如何解析帶注釋的json

    詳解Go語(yǔ)言如何解析帶注釋的json

    標(biāo)準(zhǔn)的json格式是不帶注釋,但是有時(shí)候?yàn)榱朔奖憷斫鈐son中各字段的含義,需要支持帶注釋的json,這篇文章主要介紹了Go語(yǔ)言解析帶注釋json的相關(guān)方法,希望對(duì)大家有所幫助
    2024-03-03
  • Go Map并發(fā)沖突預(yù)防與解決

    Go Map并發(fā)沖突預(yù)防與解決

    這篇文章主要為大家介紹了Go Map并發(fā)沖突預(yù)防與解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    這篇文章主要為大家介紹了go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類(lèi)型,使用起來(lái)非常方便,下面就跟隨小編一起了解一下具體使用方法吧
    2023-08-08
  • golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解

    golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解

    viper 配置管理解析庫(kù),是由大神 Steve Francia 開(kāi)發(fā),他在google領(lǐng)導(dǎo)著 golang 的產(chǎn)品開(kāi)發(fā),他也是 gohugo.io 的創(chuàng)始人之一,命令行解析庫(kù) cobra 開(kāi)發(fā)者,這篇文章主要介紹了golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解,需要的朋友可以參考下
    2020-10-10
  • go語(yǔ)言操作redis連接池的方法

    go語(yǔ)言操作redis連接池的方法

    這篇文章主要介紹了go語(yǔ)言操作redis連接池的方法,涉及Go語(yǔ)言操作radis的技巧,需要的朋友可以參考下
    2015-03-03

最新評(píng)論