日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

深入理解Go語(yǔ)言實(shí)現(xiàn)多態(tài)?_Golang

作者:ZZZhonngger ? 更新時(shí)間: 2022-07-07 編程語(yǔ)言

多態(tài)是什么

相信學(xué)過(guò)Java這種面向?qū)ο笳Z(yǔ)言的同學(xué)對(duì)于多態(tài)來(lái)說(shuō)都不陌生,在代碼執(zhí)行的時(shí)候,能夠根據(jù)子類的類型去執(zhí)行子類當(dāng)中的方法。多態(tài)是指代碼可以根據(jù)類型的具體實(shí)現(xiàn)采取不同行為的能力。如果一個(gè)類型實(shí)現(xiàn)了某個(gè)接口,所有使用這個(gè)接口的地方,都可以支持這種類型的值。

Go語(yǔ)言多態(tài)舉例

有這樣一個(gè)場(chǎng)景,我們?cè)趹?yīng)用開(kāi)發(fā)中涉及到很多通知事件,通知的類型可以是通過(guò)微信、QQ、Email等,那么我們可以抽象出一個(gè)接口,定義一個(gè)通知的接口,然后微信通知類、QQ通知類、Email通知類分別實(shí)現(xiàn)對(duì)應(yīng)的通知方法。

定義一個(gè)通知類型:notifier

// 通知者接口
type Notifier interface {
    // 通知方法,可以由具體的類進(jìn)行實(shí)現(xiàn)
    notify()
}

定義微信類型、QQ類型、Email類型,并實(shí)現(xiàn)notify方法,以指針類型作為方法的接收者

type WechatNotifier struct {
?? ?Name ? ?string
?? ?Message string
}

func (w *WechatNotifier) notify() {
?? ?fmt.Printf("%v notify %v \n", w.Name, w.Message)
}

type QQNotifier struct {
?? ?Name ? ?string
?? ?Message string
}

func (q *QQNotifier) notify() {
?? ?fmt.Printf("%v notify %v \n", q.Name, q.Message)
}

type EmailNotifier struct {
?? ?Name ? ?string
?? ?Message string
}

func (e *EmailNotifier) notify() {
?? ?fmt.Printf("%v notify %v \n", e.Name, e.Message)
}

定義發(fā)送通知方法,入?yún)镹otifier;等需要調(diào)用的時(shí)候,需要傳入實(shí)現(xiàn)了Notifier中的接口的類型

func sendNotify(notifier Notifier) {
    notifier.notify()
}

測(cè)試一下

func main() {
?? ?w := &WechatNotifier{
?? ??? ?Name: ? ?"微信",
?? ??? ?Message: "微信消息",
?? ?}

?? ?q := &QQNotifier{
?? ??? ?Name: ? ?"QQ",
?? ??? ?Message: "QQ消息",
?? ?}

?? ?e := &EmailNotifier{
?? ??? ?Name: ? ?"Email",
?? ??? ?Message: "Email消息",
?? ?}

?? ?// 接受微信類型
?? ?sendNotify(w)
?? ?// 接受QQ類型
?? ?sendNotify(q)
?? ?// 接受Email類型
?? ?sendNotify(e)
}

測(cè)試結(jié)果如下:

總結(jié)

Golang中主要是采用了接口來(lái)實(shí)現(xiàn)多態(tài),先定義一個(gè)抽象接口,然后再定義具體的實(shí)現(xiàn)類并實(shí)現(xiàn)接口中的方法,當(dāng)我們需要定義一個(gè)通用的方法時(shí),方法的入?yún)⒖梢越邮找粋€(gè)接口類型,這樣在程序設(shè)計(jì)的時(shí)候就可以不必多寫(xiě)類似的方法從而接受不同的類了,在程序的運(yùn)行時(shí),就可以動(dòng)態(tài)地把該接口指向的具體類型,從而執(zhí)行具體類型的方法!

原文鏈接:https://blog.csdn.net/weixin_43395911/article/details/123023919

欄目分類
最近更新