人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Go語言基礎(chǔ)模板設(shè)計(jì)模式示例詳解

發(fā)布日期:2022-02-01 00:56 | 文章來源:站長(zhǎng)之家

概述

模板方法模式定義了一個(gè)算法的步驟,并允許子類別為一個(gè)或多個(gè)步驟提供其實(shí)踐方式。讓子類別在不改變算法架構(gòu)的情況下,重新定義算法中的某些步驟

確定了步驟的執(zhí)行順序,單某些步驟因環(huán)境或人等因素具體實(shí)現(xiàn)是未知的

模板模式生活案例

請(qǐng)客吃飯【點(diǎn)菜->吃東西->結(jié)賬】,每個(gè)人點(diǎn)菜不一樣,吃東西不一樣,結(jié)賬也不一樣從某地到某地【起點(diǎn)->出行方式->終點(diǎn)】起點(diǎn)和終點(diǎn)不一一樣,但是每個(gè)人出行方式是不一樣的

Go沒有封裝、繼承、多態(tài)這些概念,但同樣通過別的方式可以實(shí)現(xiàn)這些特性

  • 封裝:通過方法實(shí)現(xiàn)
  • 繼承:通過匿名字段實(shí)現(xiàn)
  • 多態(tài):通過接口實(shí)現(xiàn)

策略模式涉及到兩個(gè)角色

編號(hào) 角色 描述
1 抽象父類(AbstractClass) 實(shí)現(xiàn)了模板方法,定義了算法的骨架
2 具體類(ConcreteClass) 實(shí)現(xiàn)抽象類中的抽象方法,即不同的對(duì)象的具體實(shí)現(xiàn)細(xì)節(jié)

UML

總結(jié)

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

  • 封裝不變部分,擴(kuò)展可變部分。
  • 提取公共代碼,便于維護(hù)。
  • 行為由父類控制,子類實(shí)現(xiàn)。

缺點(diǎn):

每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類來實(shí)現(xiàn),導(dǎo)致類的個(gè)數(shù)增加,使得系統(tǒng)更加龐大

使用場(chǎng)景:

有多個(gè)子類共有的方法,且邏輯相同

重要的、復(fù)雜的方法,可以考慮作為模板方法

示例

package main
import "fmt"
/*出行方式接口*/
type Itravel interface {
	Starting() //起點(diǎn)
	Travel()//出行方式
	End()//終點(diǎn)
}
//定義父類
type Persion struct {
	Name string //姓名
	Itravel Itravel  //出行方式接口
}
func (persion *Persion) SetName(name string) {
	persion.Name = name
}
func (persion Persion) Starting() {
	persion.Itravel.Starting()
}
func (persion Persion) Travel() {
	persion.Itravel.Travel()
}
func (persion Persion) End() {
	persion.Itravel.End()
}
//算法骨架
func (persion Persion) Start() {
	if persion.Itravel == nil {
		fmt.Println("Itravel is nil")
		return
	}
	fmt.Printf("%s", persion.Name)	
	persion.Starting()
	persion.Travel()
	persion.End()
	fmt.Println("\n")
}
//具體類:張三
type ZhangSan struct {
	Persion //匿名字段實(shí)現(xiàn)繼承
}
func NewZhangSan() *ZhangSan {
	c := new(ZhangSan)
	c.Persion = Persion{Itravel: c}
	return c
}
func (_ ZhangSan) Starting() {
	fmt.Printf("從%s出發(fā)", "北京")
}
func (_ ZhangSan) Travel() {
	fmt.Printf(" %s", "火車")
}
func (_ ZhangSan) End() {
	fmt.Printf(" %s", "到達(dá)上海")
}
//具體類:李四
type LiSi struct {
	Persion
}
func (_ LiSi) Starting() {
	fmt.Printf("從%s出發(fā)", "廣州")
}
func (_ LiSi) Travel() {
	fmt.Printf(" %s", "坐飛機(jī)")
}
func (_ LiSi) End() {
	fmt.Printf(" %s", "到達(dá)重慶")
}
func main() {
	//張三
	zhangsan := NewZhangSan()
	zhangsan.SetName("張三")
	zhangsan.Start()
	persion := &Persion{}
	persion.SetName("張三")
	persion.Itravel = ZhangSan{}
	persion.Start()
	//李四
	persion.SetName("李四")
	persion.Itravel = &LiSi{}
	persion.Start()
	lisi := LiSi{}
	lisi.Itravel = lisi
	lisi.SetName("李四")
	lisi.Start()
}

以上就是Go語言基礎(chǔ)模板設(shè)計(jì)模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言模板設(shè)計(jì)模式的資料請(qǐng)關(guān)注本站其它相關(guān)文章!

海外穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部