dushaoshuai / dushaoshuai.github.io

https://www.shuai.host
0 stars 0 forks source link

Go 编程: 嵌入和委托 #118

Open dushaoshuai opened 1 year ago

dushaoshuai commented 1 year ago

基本思想

应用场景:多个类型要实现接口 I,而且他们有相似的逻辑。

实现:类型 T 实现接口 I 的全部或者部分方法,其他类型通过将 T 嵌入自己而获得 T 的字段和方法(委托),在 T 的基础上,根据自己的需求,添加新的字段和方法,也可以 override T 的字段和方法,从而实现接口 I

应用

net

go-redis

command.go 中,其他 Cmder 的实现中嵌入了 baseCmd,如:

type baseCmd struct {
    ctx    context.Context
    args   []interface{}
    err    error
    keyPos int8
    _readTimeout *time.Duration
}

type StatusCmd struct {
    baseCmd
    val string
}

Template Method

可以应用到设计模式 Template Method 中。

参见