脚本之家,脚本语言编程技术及教程分享平台!
分类导航

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

服务器之家 - 脚本之家 - Golang - golang实现简单工厂、方法工厂、抽象工厂三种设计模式

golang实现简单工厂、方法工厂、抽象工厂三种设计模式

2022-09-13 11:08李慢慢233 Golang

这篇文章介绍了golang实现简单工厂、方法工厂、抽象工厂三种设计模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1、简单工厂:

第一步:创建一个文章接口,需要实现阅读和写作的功能。

?
1
2
3
4
type Article interface {
    ReadArticle() string
    WriteArticle(contents string) string
}

第二步:创建 中文书 和 英文书 两个“类”,并且分别实现两种方法。(注:golang种没有类,只有组合。应贺总强调,特别说明)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type ChineseArticle struct{}
type EnglishArticle struct{}
 
func (c *ChineseArticle) ReadArticle() string {
    return "这是中文字符"
}
func (c *EnglishArticle) ReadArticle() string {
    return "this's English chars"
}
func (c *ChineseArticle) WriteArticle(contents string) string {
    return "写入了文章"
}
func (c *EnglishArticle) WriteArticle(contents string) string {
    return "wirted words"
}

第三步:使用断言方式分配不同的参数,应该需要使用什么样的方法去实例化具体的类

?
1
2
3
4
5
6
7
8
9
10
11
func SFactory(lan string) (art Article) {
    switch lan {
    case "Chinese":
        art = &ChineseArticle{}
    case "English":
        art = &EnglishArticle{}
    default:
        art = &ChineseArticle{}
    }
    return art
}

第四步:使用

?
1
2
3
4
func main() {
    a := SFactory("Chinese")//这样,我实例化中文书还是英文书都可以了
    fmt.Println(a.ReadArticle())
}

总体结构如下图:

golang实现简单工厂、方法工厂、抽象工厂三种设计模式

2、方法工厂:

第一步:同上, 来一个文章接口

?
1
2
3
4
type Article interface {
    ReadArticle() string
    WriteArticle(contents string) string
}

第二步:来两种书。需要实例化的类。并且实现接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type ChineseArticle struct{}
type EnglishArticle struct{}
//实现读写接口
func (c *ChineseArticle) ReadArticle() string {
    return "读书了"
}
func (c *EnglishArticle) ReadArticle() string {
    return "reading books"
}
func (c *ChineseArticle) WriteArticle(contents string) string {
    return "写书了"
}
func (c *EnglishArticle) WriteArticle(contents string) string {
    return "wirting books"
}

第三步:创建两个用来创建“类”的“类”,以及其方法

?
1
2
3
4
5
6
7
8
9
10
11
type CreateEnglish struct{}
type CreateChinese struct{}
//方法工厂的核心。
func (cdb *CreateEnglish) CreateArticle() (len *EnglishArticle, err error) {
    len = &EnglishArticle{}
    return len, nil
}
func (cdb *CreateChinese) CreateArticle() (len *ChineseArticle, err error) {
    len = &ChineseArticle{}
    return len, nil
}

第四步:使用

?
1
2
3
4
5
func main() {
    a := &CreateChinese{}
    art, _ := a.CreateArticle()
    fmt.Println(art.WriteArticle("123"))
}

总体结构如下:

golang实现简单工厂、方法工厂、抽象工厂三种设计模式

抽象工厂

第一步:创建一个book,然后再创建一个能够创建book的BookCompany接口。

?
1
2
3
4
5
6
7
type BookCompany interface {
    Create() Book
}
type Book interface {
    ReadBook() string
    WriteBook() string
}

第二步:创建两book 并且实现它

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type EnglishBook struct{}
type ChineseBook struct{}
//实现book的功能
func (c *EnglishBook) ReadBook() string {
    return "reading a english book"
}
func (c *ChineseBook) ReadBook() string {
    return "读中文书"
}
func (c *EnglishBook) WriteBook() string {
    return "i'am writing"
}
func (c *ChineseBook) WriteBook() string {
    return "我在创作中"
}

第三步:创建两个印刷厂

?
1
2
3
4
5
6
7
8
9
type BeiJinCompany struct{}
type ShanghaiCompany struct{}
//一个印刷场刷英语书,一个刷中文书
func (c *BeiJinCompany) Create() Book {
    return &EnglishBook{}
}
func (c *ShanghaiCompany) Create() Book {
    return &ChineseBook{}
}

第四步:用起来

?
1
2
3
4
5
6
func main() {
    var f BookCompany
    f = new(BeiJinCompany)
    book := f.Create()
    fmt.Println(book.ReadBook())
}

整体效果如下:

golang实现简单工厂、方法工厂、抽象工厂三种设计模式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/limanman233/p/16117751.html

延伸 · 阅读

精彩推荐
  • GolangGo语言reflect.TypeOf()和reflect.Type通过反射获取类型信息

    Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息

    这篇文章主要介绍了Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    biancheng5742021-05-26
  • GolangGo语言中map使用和并发安全详解

    Go语言中map使用和并发安全详解

    golang 自带的map不是并发安全的,并发读写会报错,所以下面这篇文章主要给大家介绍了关于Go语言中map使用和并发安全的相关资料,文中通过实例代码介绍的非...

    行走的皮卡丘8722022-07-20
  • GolangGolang try catch与错误处理的实现

    Golang try catch与错误处理的实现

    社区不少人在谈论 golang 为毛不用try/catch模式,而采用苛刻的recovery、panic、defer组合,本文就来详细的介绍一下,感兴趣的可以了解一下...

    七八月份的太阳11482021-08-12
  • Golang文字解说Golang Goroutine和线程的区别

    文字解说Golang Goroutine和线程的区别

    goroutine 是 Go语言中的轻量级线程实现,由 Go 运行时(runtime)管理,使用每一个 go 关键字将会额外开启一个新的协程 goroutine,今天通过本文给大家介绍下...

    头秃猫轻王11932022-09-08
  • GolangGO 使用Webhook 实现github 自动化部署的方法

    GO 使用Webhook 实现github 自动化部署的方法

    这篇文章主要介绍了GO 使用Webhook 实现github 自动化部署的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值...

    周伯通的麦田5502020-07-09
  • GolangGo 有哪几种无法恢复的致命场景?

    Go 有哪几种无法恢复的致命场景?

    在今天这篇文章中,我们介绍了 Go 语言的三种错误类型。其中针对大家最少见,但一碰到就很容易翻车的致命错误 fatal error 进行了介绍,给出了一些经典...

    脑子进煎鱼了8682021-12-28
  • GolangGo 值传递与引用传递的方法

    Go 值传递与引用传递的方法

    这篇文章主要介绍了Go 值传递与引用传递的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    chencanxin2242020-05-23
  • GolangGo语言中如何确保Cookie数据的安全传输

    Go语言中如何确保Cookie数据的安全传输

    这篇文章主要介绍了Go语言中如何确保Cookie数据的安全传输,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    Kevin3752020-06-07