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

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

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

橋接模式

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

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

概念示例

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

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

抽象層: 代表計算機

實施層: 代表打印機

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

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

相關(guān)文章

  • Go語言使用時會遇到的錯誤及解決方法詳解

    Go語言使用時會遇到的錯誤及解決方法詳解

    這篇文章主要為大家詳細介紹了Go語言使用時常常會遇到的一些錯誤及解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-07-07
  • 詳解Go語言中Goroutine退出機制的原理及使用

    詳解Go語言中Goroutine退出機制的原理及使用

    goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過?go?關(guān)鍵字來開啟?goroutine?即可。本文就來詳細講講Goroutine退出機制的原理及使用,感興趣的可以了解一下
    2022-07-07
  • go引入自建包名報錯:package?XXX?is?not?in?std解決辦法

    go引入自建包名報錯:package?XXX?is?not?in?std解決辦法

    這篇文章主要給大家介紹了go引入自建包名報錯:package?XXX?is?not?in?std的解決辦法,這是在寫測試引入包名的時候遇到的錯誤提示,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • GoLang中Strconv庫有哪些常用方法

    GoLang中Strconv庫有哪些常用方法

    這篇文章主要介紹了GoLang中Strconv庫有哪些常用方法,strconv庫實現(xiàn)了基本數(shù)據(jù)類型與其字符串表示的轉(zhuǎn)換,主要有以下常用函數(shù):?Atoi()、Itia()、parse系列、format系列、append系列
    2023-01-01
  • go語言中使用timer的常用方式

    go語言中使用timer的常用方式

    這篇文章主要介紹了go語言中使用timer的常用方式,實例分析了三種常用的使用timer的方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • golang panic及處理機制

    golang panic及處理機制

    Go語言追求簡潔優(yōu)雅,所以,Go語言不支持傳統(tǒng)的 try…catch…finally 這種異常,因為Go語言的設(shè)計者們認為,將異常與控制結(jié)構(gòu)混在一起會很容易使得代碼變得混亂,今天給大家介紹golang panic及處理機制,需要的朋友參考下吧
    2021-08-08
  • 玩轉(zhuǎn)Go命令行工具Cobra

    玩轉(zhuǎn)Go命令行工具Cobra

    這篇文章主要介紹了玩轉(zhuǎn)Go命令行工具Cobra,本文介紹了Cobra的最基本也是最常用的使用部分,但是Cobra仍然有很多優(yōu)秀的操作值得我們學(xué)習(xí),需要的朋友可以參考下
    2022-08-08
  • golang中interface接口的深度解析

    golang中interface接口的深度解析

    什么是interface,簡單的說,interface是一組method的組合,下面這篇文章主要給大家深度解析了關(guān)于golang中的interface接口,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    這篇文章主要為大家介紹了Golang標(biāo)準(zhǔn)庫unsafe源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go使用XORM操作MySQL的陷阱盤點分析

    Go使用XORM操作MySQL的陷阱盤點分析

    在?Go?語言開發(fā)中,大家為了方便,通常會選擇使用?ORM?操作數(shù)據(jù)庫,比如使用?XORM?或?GORM?操作?MySQL,本文我們來介紹一下使用?XORM[3]?操作?MySQL?可能會遇到的陷阱
    2023-11-11

最新評論