深入了解GoLang中的工廠(chǎng)設(shè)計(jì)模式
1. 定義
工廠(chǎng)模式是一種創(chuàng)建型設(shè)計(jì)模式,有了工廠(chǎng)只需要知道要制造的東西名字,就能讓對(duì)應(yīng)工廠(chǎng)進(jìn)行生產(chǎn),不用關(guān)心生產(chǎn)過(guò)程。
2. 優(yōu)點(diǎn)
1、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱(chēng)就可以了。
2、擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠(chǎng)類(lèi)就可以。
3、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
3. 代碼實(shí)現(xiàn)
3.1 普通工廠(chǎng)
package factory
type HeroFactory interface {
Name(str string)
}
type WoManHero struct {
Age string
Hight float32
}
func (w WoManHero) Name(str string) {
panic("implement me")
}
type ManHero struct {
Age string
Hight float32
}
func (m ManHero) Name(str string) {
panic("implement me")
}
// 簡(jiǎn)單工廠(chǎng)模式
func NewHeroFactory(sex int) HeroFactory {
switch sex {
case 0:
return ManHero{}
case 1:
return WoManHero{}
default:
return nil
}
}3.2 工廠(chǎng)方法
package factory
type IRuleHeroFactor interface {
CreateHero() HeroFactory
}
type WoManHeroFactory struct {
}
func (s WoManHeroFactory) CreateHero() HeroFactory {
return &WoManHero{}
}
type ManHeroFactory struct {
}
func (p ManHeroFactory) CreateHero() HeroFactory {
return &ManHero{}
}
// NewIRuleConfigParserFactory 用一個(gè)簡(jiǎn)單工廠(chǎng)封裝工廠(chǎng)方法
func NewIRuleConfigParserFactory(t string) IRuleHeroFactor {
switch t {
case "M":
return ManHeroFactory{}
case "W":
return WoManHeroFactory{}
}
return nil
}3.3 抽象工廠(chǎng)
抽象接口里包含了各自的工廠(chǎng)方法或者普通工廠(chǎng),再由各自實(shí)現(xiàn)自己的工廠(chǎng)
package factory
// IRuleConfigParser IRuleConfigParser
type IRuleConfigParser interface {
Parse(data []byte)
}
// jsonRuleConfigParser jsonRuleConfigParser
type jsonRuleConfigParser struct{}
// Parse Parse
func (j jsonRuleConfigParser) Parse(data []byte) {
panic("implement me")
}
// ISystemConfigParser ISystemConfigParser
type ISystemConfigParser interface {
ParseSystem(data []byte)
}
// jsonSystemConfigParser jsonSystemConfigParser
type jsonSystemConfigParser struct{}
// Parse Parse
func (j jsonSystemConfigParser) ParseSystem(data []byte) {
panic("implement me")
}
// IConfigParserFactory 工廠(chǎng)方法接口
type IConfigParserFactory interface {
CreateRuleParser() IRuleConfigParser
CreateSystemParser() ISystemConfigParser
}
type jsonConfigParserFactory struct{}
func (j jsonConfigParserFactory) CreateRuleParser() IRuleConfigParser {
return jsonRuleConfigParser{}
}
func (j jsonConfigParserFactory) CreateSystemParser() ISystemConfigParser {
return jsonSystemConfigParser{}
}IConfigParserFactory包含了IRuleConfigParser和ISystemConfigParser兩個(gè)解析器,再分別由jsonRuleConfigParser和jsonConfigParserFactory實(shí)現(xiàn)對(duì)應(yīng)的解析方法
到此這篇關(guān)于深入了解GoLang中的工廠(chǎng)設(shè)計(jì)模式的文章就介紹到這了,更多相關(guān)GoLang工廠(chǎng)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang限流器time/rate設(shè)計(jì)與實(shí)現(xiàn)詳解
在?Golang?庫(kù)中官方給我們提供了限流器的實(shí)現(xiàn)golang.org/x/time/rate,它是基于令牌桶算法(Token?Bucket)設(shè)計(jì)實(shí)現(xiàn)的,下面我們就來(lái)看看他的具體使用吧2024-03-03
golang創(chuàng)建文件目錄os.Mkdir,os.MkdirAll的區(qū)別說(shuō)明
本文主要講述os.Mkdir、os.MkdirAll區(qū)別以及在創(chuàng)建文件目錄過(guò)程中的一些其他技巧,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
用Go+Vue.js快速搭建一個(gè)Web應(yīng)用(初級(jí)demo)
這篇文章主要介紹了用Go+Vue.js快速搭建一個(gè)Web應(yīng)用(初級(jí)demo),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-11-11
go簡(jiǎn)介及國(guó)內(nèi)鏡像源配置全過(guò)程
本文介紹了Go語(yǔ)言的基本概念和環(huán)境配置,包括GOROOT、GOPATH和GOMODULE的設(shè)置,還展示了如何在IDEA中配置Go語(yǔ)言的開(kāi)發(fā)環(huán)境,并通過(guò)一個(gè)簡(jiǎn)單的“HelloWorld”項(xiàng)目來(lái)熟悉Go語(yǔ)言的基本語(yǔ)法和開(kāi)發(fā)流程2025-01-01
go語(yǔ)言csrf庫(kù)使用實(shí)現(xiàn)原理示例解析
這篇文章主要為大家介紹了go語(yǔ)言csrf庫(kù)使用實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)可視化詳解
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二叉樹(shù)可視化的方法詳解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09
Go語(yǔ)言中三個(gè)輸入函數(shù)(scanf,scan,scanln)的區(qū)別解析
本文詳細(xì)介紹了Go語(yǔ)言中三個(gè)輸入函數(shù)Scanf、Scan和Scanln的區(qū)別,包括用法、功能和輸入終止條件等,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-10-10
Golang開(kāi)發(fā)命令行之flag包的使用方法
這篇文章主要介紹Golang開(kāi)發(fā)命令行及flag包的使用方法,日常命令行操作,相對(duì)應(yīng)的眾多命令行工具是提高生產(chǎn)力的必備工具,本文圍繞該內(nèi)容展開(kāi)話(huà)題,需要的朋友可以參考一下2021-10-10

