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

Golang設(shè)計(jì)模式中的橋接模式詳細(xì)講解

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

橋接模式

橋接是一種結(jié)構(gòu)型設(shè)計(jì)模式, 可將業(yè)務(wù)邏輯或一個大類拆分為不同的層次結(jié)構(gòu), 從而能獨(dú)立地進(jìn)行開發(fā)。

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

概念示例

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

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

抽象層: 代表計(jì)算機(jī)

實(shí)施層: 代表打印機(jī)

這兩個層次可通過橋接進(jìn)行溝通, 其中抽象層 (計(jì)算機(jī)) 包含對于實(shí)施層 (打印機(jī)) 的引用。 抽象層和實(shí)施層均可獨(dú)立開發(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: 實(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

到此這篇關(guān)于Golang設(shè)計(jì)模式中的橋接模式詳細(xì)講解的文章就介紹到這了,更多相關(guān)Go橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang?Gin?中間件?Next()方法示例詳解

    Golang?Gin?中間件?Next()方法示例詳解

    這篇文章主要介紹了Golang?Gin?中間件?Next()方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 深入理解Go中的項(xiàng)目代碼布局

    深入理解Go中的項(xiàng)目代碼布局

    Go?語言的創(chuàng)世項(xiàng)目其實(shí)就是?Go?語言項(xiàng)目自身,是全世界第一個?Go?語言項(xiàng)目,本文主要來和大家詳細(xì)介紹一下Go中的項(xiàng)目代碼布局,需要的可以了解下
    2023-11-11
  • 解決Go gorm踩過的坑

    解決Go gorm踩過的坑

    這篇文章主要介紹了解決Go gorm踩過的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言LeetCode題解682棒球比賽

    Go語言LeetCode題解682棒球比賽

    這篇文章主要為大家介紹了Go語言LeetCode題解682棒球比賽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang?pprof監(jiān)控memory?block?mutex統(tǒng)計(jì)原理分析

    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語言包管理工具go?mod以及包詳解

    GO語言包管理工具go?mod以及包詳解

    go mod是go的一個模塊管理工具,用來代替?zhèn)鹘y(tǒng)的GOPATH方案,下面這篇文章主要給大家介紹了關(guān)于GO語言包管理工具go?mod以及包詳解的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Go操作Kafka的實(shí)現(xiàn)示例(kafka-go)

    Go操作Kafka的實(shí)現(xiàn)示例(kafka-go)

    本文介紹了使用kafka-go庫在Go語言中與Kafka進(jìn)行交互,涵蓋了kafka-go的安裝、API使用、消息發(fā)送與消費(fèi)方法,以及如何通過DockerCompose快速搭建Kafka環(huán)境,文章還比較了其他兩個常用的Kafka客戶端庫,感興趣的可以了解一下
    2024-10-10
  • go-redis Pipeline與事務(wù)的實(shí)現(xiàn)示例

    go-redis Pipeline與事務(wù)的實(shí)現(xiàn)示例

    本文介紹了Go-Redis v9中Pipeline、事務(wù)和Watch機(jī)制的使用方法與優(yōu)化實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go語言實(shí)現(xiàn)的排列組合問題實(shí)例(n個數(shù)中取m個)

    Go語言實(shí)現(xiàn)的排列組合問題實(shí)例(n個數(shù)中取m個)

    這篇文章主要介紹了Go語言實(shí)現(xiàn)的排列組合問題,結(jié)合實(shí)例形式分析了Go語言實(shí)現(xiàn)排列組合數(shù)學(xué)運(yùn)算的原理與具體操作技巧,需要的朋友可以參考下
    2017-02-02
  • 純Go語言實(shí)現(xiàn)百萬級數(shù)據(jù)高效導(dǎo)出Excel和CSV實(shí)戰(zhàn)指南

    純Go語言實(shí)現(xiàn)百萬級數(shù)據(jù)高效導(dǎo)出Excel和CSV實(shí)戰(zhàn)指南

    這篇文章主要為大家詳細(xì)介紹了如何通過純Go語言實(shí)現(xiàn)百萬級數(shù)據(jù)高效導(dǎo)出Excel和CSV的相關(guān)知識,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下
    2025-09-09

最新評論

梁平县| 顺平县| 自贡市| 库伦旗| 正镶白旗| 柞水县| 昭觉县| 乐昌市| 崇阳县| 五峰| 栾城县| 华亭县| 赣州市| 安达市| 延川县| 滨州市| 花莲县| 孟津县| 鄂温| 霸州市| 新余市| 长丰县| 沅陵县| 吉木乃县| 阳西县| 民和| 岳阳市| 界首市| 大田县| 周宁县| 砀山县| 庆安县| 孟村| 陆丰市| 迁安市| 青海省| 交城县| 嘉兴市| 宣化县| 大新县| 宁安市|