知识卡片

隐式实现降耦

普通读书笔记卡 · 1478.a

内容

Go 类型无需声明“实现了某接口”,只要方法集匹配即可。调用方定义需要的最小行为,提供方保持独立演进;发散:好的接口常出现在使用方,而不是实现方。

参考来源

- 位置:《Go语言底层原理剖析》第12章《接口与程序设计模式》12.4.2节《接口实现》 - 结论依据:原文明确"和其他需要显式声明接口实现类的语言不同,在Go语言中,接口的实现是隐式的。即我们不用明确地指出某一个类型实现了某一个接口,只要在某一类型的方法中实现了接口中的全部方法签名,就意味着此类型实现了这一接口",并举例 Rectangle、Triangle 均可独立实现 Shape 接口而互不知晓对方,因此可以推出"Go 的接口实现是隐式的、只看方法集是否匹配"的结论。 - 原始内容:和其他需要显式声明接口实现类的语言不同,在Go语言中,接口的实现是隐式的。即我们不用明确地指出某一个类型实现了某一个接口,只要在某一类型的方法中实现了接口中的全部方法签名,就意味着此类型实现了这一接口……只要Rectangle实现了Shape接口中所有的方法签名,我们就说Rectangle实现了Shape接口。即使Rectangle还拥有其他方法,即使没有任何显式的声明,也不受影响。