一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - 使用go實(shí)現(xiàn)適配器模式

使用go實(shí)現(xiàn)適配器模式

2021-12-02 12:08Rick.lz Golang

這篇文章主要介紹了使用go實(shí)現(xiàn)適配器模式,這個(gè)模式就是用來做適配的,它將不兼容的接口轉(zhuǎn)換為可兼容的接口,讓原本由于接口不兼容而不能一起工作的類可以一起工作,需要的朋友可以參考下

適配器模式

定義

適配器模式的英文翻譯是Adapter Design Pattern。顧名思義,這個(gè)模式就是用來做適配的,它將不兼容的接口轉(zhuǎn)換為可兼容的接口,讓原本由于接口不兼容而不能一起工作的類可以一起工作。

舉個(gè)栗子:

現(xiàn)在比較新款的電腦都有USB-C接口,但是我們目前的鼠標(biāo)鍵盤的接口都是傳統(tǒng)的USB接口,所以是不能使用的,這時(shí)候我們會(huì)買個(gè)轉(zhuǎn)接口來進(jìn)行接口的轉(zhuǎn)接,那么這個(gè)轉(zhuǎn)接口在設(shè)計(jì)模式中就是適配器。

代碼實(shí)現(xiàn)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// 基礎(chǔ)的播放功能
type MediaPlayer interface {
    play(audioType string, fileName string)
}
 
// 不同的播放器平臺(tái)
type AdvancedMediaPlayer interface {
    playVlc(fileName string)
    playMp4(fileName string)
}
 
// VlcPlayers
type VlcPlayers struct {
}
 
func (v *VlcPlayers) playVlc(fileName string) {
    fmt.Println("正在播放" + fileName)
}
 
func (v *VlcPlayers) playMp4(fileName string) {
    fmt.Println("格式不支持")
}
 
// Mp4Player
type Mp4Player struct {
}
 
func (m *Mp4Player) playVlc(fileName string) {
    fmt.Println("格式不支持")
}
 
func (m *Mp4Player) playMp4(fileName string) {
    fmt.Println("正在播放" + fileName)
}
 
// 適配器
type MediaAdapter struct {
    MusicPlayer AdvancedMediaPlayer
}
 
func NewMediaAdapter(audioType string) *MediaAdapter {
    var mediaAdapter MediaAdapter
    switch audioType {
    case "vlc":
        mediaAdapter.MusicPlayer = &VlcPlayers{}
    case "mp4":
        mediaAdapter.MusicPlayer = &Mp4Player{}
    default:
        panic("不支持的類型")
    }
    return &mediaAdapter
}
func (m *MediaAdapter) play(audioType string, fileName string) {
    switch audioType {
    case "vlc":
        m.MusicPlayer.playVlc(fileName)
    case "mp4":
        m.MusicPlayer.playMp4(fileName)
 
    }
}
 
// AudioPlayer 音頻播放器類
type AudioPlayer struct {
    mediaAdapter *MediaAdapter
}
 
// Play 播放音頻
func (auPlayer *AudioPlayer) Play(audioType, fileName string) {
    if audioType == "mp3" {
        fmt.Println("正在播放" + fileName)
        return
    }
    auPlayer.mediaAdapter = NewMediaAdapter(audioType)
    auPlayer.mediaAdapter.play(audioType, fileName)
}

測(cè)試文件

?
1
2
3
4
5
6
func TestPlayer(t *testing.T) {
    ad := AudioPlayer{}
    ad.Play("mp4", "荷塘月色")
    ad.Play("vlc", "小蘋果")
    ad.Play("mp3", "天空之城")
}

這里做個(gè)簡(jiǎn)單的分析

1、我們有一個(gè) AudioPlayer ,但是只能播放 mp3;

2、我們希望 AudioPlayer 也可以播放 mp3 和 vlc;

3、引入了一個(gè) MediaAdapter ,通過適配器來處理不支持的功能,對(duì)于 AudioPlayer 來講,它只用需要調(diào)用 MediaAdapter 就能實(shí)現(xiàn)各種播放格式音頻的播放;

4、MediaAdapter 對(duì)各種格式進(jìn)行了包裝,不同的格式音頻,可以有用相同的調(diào)用方法。

放一張結(jié)構(gòu)圖

使用go實(shí)現(xiàn)適配器模式

優(yōu)點(diǎn)

1、可以讓任何兩個(gè)沒有關(guān)聯(lián)的類一起運(yùn)行。

2、提高了類的復(fù)用。

3、增加了類的透明度。

4、靈活性好。

缺點(diǎn)

過多地使用適配器,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握

一般來說,適配器模式可以看作一種“補(bǔ)償模式”,用來補(bǔ)救設(shè)計(jì)上的缺陷。應(yīng)用這種模式算是“無奈之舉”,如果在設(shè)計(jì)初期,我們就能協(xié)調(diào)規(guī)避接口不兼容的問題,那這種模式就沒有應(yīng)用的機(jī)會(huì)了。

如果大量的使用這種模式,可能就是我們的前期的設(shè)計(jì)有很大的問題,就需要考慮重構(gòu)了

適用范圍

1、封裝有缺陷的接口設(shè)計(jì)

2、統(tǒng)一多個(gè)類的接口設(shè)計(jì)

3、替換依賴的外部系統(tǒng)

4、兼容老版本接口

5、適配不同格式的數(shù)據(jù)

代理、橋接、裝飾器、適配器4種設(shè)計(jì)模式的區(qū)別

代理模式:代理模式在不改變?cè)碱惤涌诘臈l件下,為原始類定義一個(gè)代理類,主要目的是控制訪問,而非加強(qiáng)功能,這是它跟裝飾器模式最大的不同。

橋接模式:橋接模式的目的是將接口部分和實(shí)現(xiàn)部分分離,從而讓它們可以較為容易、也相對(duì)獨(dú)立地加以改變。

裝飾器模式:裝飾者模式在不改變?cè)碱惤涌诘那闆r下,對(duì)原始類功能進(jìn)行增強(qiáng),并且支持多個(gè)裝飾器的嵌套使用。

適配器模式:適配器模式是一種事后的補(bǔ)救策略。適配器提供跟原始類不同的接口,而代理模式、裝飾器模式提供的都是跟原始類相同的接口。

參考

【文中代碼】https://github.com/boilingfrog/design-pattern-learning/tree/master/適配器模式
【大話設(shè)計(jì)模式】https://book.douban.com/subject/2334288/
【極客時(shí)間】https://time.geekbang.org/column/intro/100039001
【菜鳥教程】https://www.runoob.com/design-pattern/adapter-pattern.html
【詩適配器模式】https://boilingfrog.github.io/2021/11/14/使用go實(shí)現(xiàn)適配器模式/

到此這篇關(guān)于使用go實(shí)現(xiàn)適配器模式的文章就介紹到這了,更多相關(guān)go適配器模式內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/ricklz/p/15552211.html

延伸 · 閱讀

精彩推薦
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說起,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Go語言中文網(wǎng)11352020-05-21
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 亚洲欧美成人综合久久久 | 免费亚洲视频 | 亚洲精品久久久久69影院 | 日本免费高清在线观看播放 | 国产综合第一页 | 国产精品nv在线观看 | 日本免费的一级绿象 | 福利视频导航大全 | 男女性刺激爽爽免费视频 | 精品网站一区二区三区网站 | 国产乱妇无码大片在线观看 | 国产精品资源在线观看网站 | 色综合久久九月婷婷色综合 | 四虎影视紧急入口地址大全 | sihu国产午夜精品一区二区三区 | 精品在线视频一区 | 波多野结衣在线中文字幕 | 成人免费在线视频观看 | 视频亚洲一区 | 乳环调教 | 逼逼流水了 | 蝴蝶传媒免费安装 | 亚洲精品福利在线 | 日本护士撒尿xxxxhd | chinese调教踩踏视频 | 高h全肉np触手 | 欧美福利在线播放 | 免费二区 | 亚洲va在线va天堂va偷拍 | 黄动漫车车好快的车车a | 欧美一区二区三区综合色视频 | 爱情岛永久成人免费网站 | 日韩久久综合 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 青草青草久热精品视频在线网站 | 91韩国女主播 | 日韩精品成人免费观看 | 国产青草视频在线观看免费影院 | 国产在亚洲线视频观看 | 波多野结中文字幕在线69视频 | 香蕉国产成版人视频在线观看 |