go语言中的接口很有意思,是一种高内聚松耦合的东西,下面我用来打一个比喻:
接口呢相当于一个领导,他提出了一些列方法,至于这些方法怎么实现,领导不管
type 领导 interface {
夜袭打法 () //方法一
挖地道打法() //方法二
地雷打法() //方法三
狙击骚扰法() //方法四
}
你看领导提出了四种消灭敌人的法子,这些法子具体怎么打,领导不关心,全部由下面的兵兵去实现。
type 兵兵 stuct{
...
...
}
func (a 兵兵) 夜袭打法() {
具体实现。。。。。
}
func (a 兵兵) 挖地道打法() {
具体实现。。。。。
}
func (a 兵兵) 地雷打法() {
具体实现。。。。。
}
func (a 兵兵) 狙击骚扰法() {
具体实现。。。。。
}
很好,凡是领导提出的消灭敌人的法子,兵兵们都有一套实现的方法,领导很满意,因为手底下的兵兵们完全实现了领导的作战思想。
那么来一场实战吧。
var a 领导
var b=兵兵{...}
b.挖地道打法() //兵兵在前线完成了领导提出来的挖地道打法
a=b //领导是无法直接展开实例的,但是领导可以观看兵兵呀,我们可以理解为领导直接指挥,因为大领导可以什么都不做,所以任何空接口代表实现了任何方法
a.夜袭打法() //在领导的直接指挥下,兵兵当即演习了一次夜袭打法。
func (敌人)打仗(a 领导){ //这里传入的领导,实际上当然在实例中会传入兵兵了,因为的接口,最后会是兵兵去送进去实现
.....
}