如何解耦循环依赖

package a

type A struct{
...
}
package b

type B struct{
...
}

假设package a会使用b.B,package b会使用a.A,如此会产生循环依赖.

通常做法是将struct A,B移动到第三个包中再调用来解决,请问是否还有其他解耦的方法?

共 3 个回复


stevewang

可以用接口来解耦。

# 0

stevewang

package a

type Interface interface {
    Fun()
}

type A struct {
}

func (this *A) Fun(v Interface) {
    v.Fun()
}
package b

import "a"

type B struct {
}

func (this *B) f1() {
    p := new(a.A)
    p.Fun(this)
}

func (this *B) Fun() {
}
# 2