Go语言中Interface的理念

Go语言中Interface淡化了面向对象中接口应具有的象征意义,接口在Go语言中仅仅只是“表现形式”上相同的一类事物的抽象概念。在Go语言中只要是具有相同“表现形式”的“类型”都具有相同的Interface,而不需要考虑这个Interface在具体的使用中应具有的实际意义。这样的话,就把Interface的成本交给使用者了,而不是交给设计者。

设计者只负责设计method,也就是Interface的构成元素,Interface在具体的使用中应该有的实际意义都是交给Interface的使用者去确定。举个最简单的例子:

跑假设有两种意思:一种是逃跑,英文叫escape;另一种是跑步,英文叫run。如果中文就一种,把他叫做pao。

type BadMan struct{
}
func (badMan *BadMan) pao(){
}

type SportMan struct{
}
func (sportMan *SportMan) pao(){
}
//设计人员只考虑这部分
type Pao Interface{
    pao()
} 
//这个部分由使用者考虑
var paoA Pao = new(BadMan)
var paoB Pao = new(SportMan)

虽然两个类型的pao接口实际意义不一样,但对Go语言来说,我认为他们的接口是一样的,因为“表现形式”相同。至于在什么情景下应该去使用BadMan或SportMan的pao接口才能正确地完成任务,这个是使用者考虑的,设计Interface的人员不要考虑。


go的interface更加接近interface这个概念的本质,因为对于实现了这个interface的类型里面的任何一个方法的类型而言,都可以划归到这个interface种群里面。而面向对象设计语言里面,类型必须安全实现interface的内容才能被其管理,否则就是一个抽象类。离诞生对象的类型还差一布。

在抽象与实例化的道路上,go语言一步到位,而java和cpp如果想一步到位的化,那么必须实现interface的全部方法。

本文来自:CSDN博客

感谢作者:chanshimudingxi

查看原文:Go语言中Interface的理念

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。