13《Go语言入门》Map实现工厂模式和Set集合

这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会🥴,此处应有掌声👏👏👏。
文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。

Map实现工厂模式

工厂模式(Factory Pattern)是 编程语言 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,使其创建过程延迟到子类进行。

  • Map的value除了数据类型之外,还可以是一个函数

  • 与Go的Dock type接口方式一起,可以方便的实现单一方法对象的工厂模式

在Go语言中函数是一等公民。
你可以用Map来实现一个平时需要比较多代码来实现的工厂模式。

代码示例:

func TestMapWithFunValue(t *testing.T) {
	m := map[int]func(op int) int{}
	m[0] = func(op int) int {
		return op
	}
	m[1] = func(op int) int {
		return op * op
	}
	m[2] = func(op int) int {
		return op * op * op
	}
	t.Log(m[0](2), m[1](2), m[2](2))
}

关于Go中的工厂模式,这里不过多介绍了,后面还会讲到的。
关注点赞给我点支持吧!谢谢啦!🙂🙂🙂

Map实现Set集合

Java中的集合类,如HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。

下图为Java集合框架图:
在这里插入图片描述
该集合框架由三部分组成

  • 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
  • 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

大家如果还是不能理解集合的话,可以看下Java集合框架

不得不说Java设计的挺强大的,但是也确实够复杂的。
而Go的内置集合中没有Set实现,可以map[type]bool实现Set集合。
代码示例:

func TestMapForSet(t *testing.T) {
	mySet := map[int]bool{}
	mySet[1] = true
	t.Log(mySet)

	key := 1
	mapKeyExist(t, mySet, key)

	delete(mySet, key)
	mapKeyExist(t, mySet, key)

	t.Log(mySet)
}

func mapKeyExist(t *testing.T, mySet map[int]bool, n int) {
	if mySet[n] {
		t.Logf("%d is existing", n)
	} else {
		t.Logf("%d is not existing", n)
	}
}

支持🤟

🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟

  • 🎸我会持续编写【软件开发相关】的文章,保持每周至少一篇文章。
  • 🎸如果你也是【软件工程师】,【关注❤️我】,一定会对你有所帮助。
  • 🎸如果这篇文章对你有所帮助,那就麻烦,【点赞👍】
  • 🎸您的支持将给与我更大的动力,谢谢😀。

🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值