最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

層次結(jié)構(gòu)中的第一層 (通常稱為抽象部分) 將包含對第二層 (實現(xiàn)部分) 對象的引用。 抽象部分將能將一些 (有時是絕大部分) 對自己的調(diào)用委派給實現(xiàn)部分的對象。 所有的實現(xiàn)部分都有一個通用接口, 因此它們能在抽象部分內(nèi)部相互替換。

概念示例

假設(shè)你有兩臺電腦: 一臺 Mac 和一臺 Windows。 還有兩臺打印機: 愛普生和惠普。 這兩臺電腦和打印機可能會任意組合使用。 客戶端不應(yīng)去擔(dān)心如何將打印機連接至計算機的細(xì)節(jié)問題。

如果引入新的打印機, 我們也不會希望代碼量成倍增長。 所以, 我們創(chuàng)建了兩個層次結(jié)構(gòu), 而不是 2x2 組合的四個結(jié)構(gòu)體:

  • 抽象層: 代表計算機
  • 實施層: 代表打印機

這兩個層次可通過橋接進(jìn)行溝通, 其中抽象層 (計算機) 包含對于實施層 (打印機) 的引用。 抽象層和實施層均可獨立開發(fā), 不會相互影響。

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: 實施

package main
type Printer interface {
    PrintFile()
}

epson.go: 具體實施

package main
import "fmt"
type Epson struct {}
func (p \*Epson) PrintFile() {
    fmt.Println("Printing by a EPSON Printer")
}

hp.go: 具體實施

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 橋接模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang中本地緩存庫cache2go的使用小結(jié)

    Golang中本地緩存庫cache2go的使用小結(jié)

    本文介紹了Go語言本地緩存庫cache2go的使用方法和源碼分析,cache2go提供了并發(fā)安全的讀寫操作,支持過期時間控制,下面就來詳細(xì)的介紹cache2go如何創(chuàng)建、添加、讀取、刪除緩存項及設(shè)置回調(diào)函數(shù),感興趣的可以了解一下
    2026-04-04
  • 淺談Golang如何使用Viper進(jìn)行配置管理

    淺談Golang如何使用Viper進(jìn)行配置管理

    在Golang生態(tài)中,Viper是一個不錯的開源配置管理框架,這篇文章主要為大家介紹了Golang如何使用Viper進(jìn)行配置管理,需要的可以參考一下
    2023-06-06
  • Go?Java算法之單詞搜索示例詳解

    Go?Java算法之單詞搜索示例詳解

    這篇文章主要為大家介紹了Go?Java算法之單詞搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go 通過結(jié)構(gòu)struct實現(xiàn)接口interface的問題

    Go 通過結(jié)構(gòu)struct實現(xiàn)接口interface的問題

    這篇文章主要介紹了Go 通過結(jié)構(gòu)struct實現(xiàn)接口interface的問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • grpool?goroutine池協(xié)程管理

    grpool?goroutine池協(xié)程管理

    這篇文章主要介紹了grpool?goroutine池協(xié)程管理,goroutine協(xié)程非常輕量級,這也是為什么go支持高并發(fā),但是goroutine頻繁創(chuàng)建銷毀對GC的壓力比較大,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-06-06
  • 在Go中創(chuàng)建自定義錯誤的方式總結(jié)

    在Go中創(chuàng)建自定義錯誤的方式總結(jié)

    在程序開發(fā)中錯誤處理是至關(guān)重要的,下面這篇文章主要給大家介紹了關(guān)于在Go中創(chuàng)建自定義錯誤的方式,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Go具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • linux中用shell快速安裝配置Go語言的開發(fā)環(huán)境

    linux中用shell快速安裝配置Go語言的開發(fā)環(huán)境

    相信每位開發(fā)者都知道選擇一門開發(fā)語言,免不了需要安裝配置開發(fā)環(huán)境,所以這篇文章給大家分享了linux下使用shell一鍵安裝配置GO語言開發(fā)環(huán)境的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • Golang語言中切片的長度和容量的概念和使用

    Golang語言中切片的長度和容量的概念和使用

    這篇文章主要介紹了Golang語言中切片的長度和容量的概念和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go 語言json.Unmarshal 遇到的小問題(推薦)

    Go 語言json.Unmarshal 遇到的小問題(推薦)

    這篇文章主要介紹了 Go 語言json.Unmarshal 遇到的小問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 詳解Golang如何優(yōu)雅接入多個遠(yuǎn)程配置中心

    詳解Golang如何優(yōu)雅接入多個遠(yuǎn)程配置中心

    這篇文章主要為大家為大家介紹了Golang如何優(yōu)雅接入多個遠(yuǎn)程配置中心詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評論

信阳市| 定南县| 托克逊县| 南城县| 襄垣县| 江安县| 榆林市| 宁乡县| 阿克苏市| 通江县| 新绛县| 常宁市| 民丰县| 萍乡市| 色达县| 隆林| 嫩江县| 济阳县| 德令哈市| 同德县| 静宁县| 余江县| 四子王旗| 芜湖县| 万宁市| 全椒县| 鹤庆县| 洪泽县| 兰州市| 珠海市| 库尔勒市| 汉寿县| 张北县| 集安市| 延川县| 永寿县| 平塘县| 财经| 萍乡市| 娄底市| 昌邑市|