- 策略描述:
- 不直接修改原有的
Animal
接口,而是创建一个新的接口,该新接口嵌入原有的Animal
接口,并添加新的Run
方法。这样,原有的实现类(如Dog
结构体)因为已经实现了Animal
接口,对于新接口,只要它再实现Run
方法,就可以满足新接口的要求,而在使用原功能时,仍然可以使用原Animal
接口,无需修改原实现类代码。
- 示例代码:
package main
import "fmt"
// 原有的Animal接口
type Animal interface {
Speak() string
}
// Dog结构体实现Animal接口
type Dog struct {
Name string
}
func (d Dog) Speak() string {
return fmt.Sprintf("Woof! My name is %s", d.Name)
}
// 新的接口,嵌入原Animal接口并添加Run方法
type AdvancedAnimal interface {
Animal
Run() string
}
// Dog结构体实现AdvancedAnimal接口的Run方法
func (d Dog) Run() string {
return fmt.Sprintf("%s is running", d.Name)
}
func main() {
dog := Dog{Name: "Buddy"}
// 使用原Animal接口
var a Animal = dog
fmt.Println(a.Speak())
// 使用新的AdvancedAnimal接口
var aa AdvancedAnimal = dog
fmt.Println(aa.Speak())
fmt.Println(aa.Run())
}