// 定义一个结构体,表示一个汽车 type Car struct { color string brand string } // 定义一个方法,表示汽车的行驶功能,这是汽车的单一职责 func (c *Car) Drive() { fmt.Println("The car is driving.") } // 定义一个方法,表示汽车的喇叭功能,这是汽车的单一职责 func (c *Car) Honk() { fmt.Println("The car is honking.") } // 错误的部分:汽车类不应该负责维修汽车的功能,这违反了单一职责原则 func (c *Car) Repair() { fmt.Println("The car is being repaired.") }
// 定义一个结构体,表示一个汽车 type Car struct { color string brand string } // 定义一个方法,表示汽车的行驶功能,这是汽车的单一职责 func (c *Car) Drive() { fmt.Println("The car is driving.") } // 定义一个方法,表示汽车的喇叭功能,这是汽车的单一职责 func (c *Car) Honk() { fmt.Println("The car is honking.") } // 定义一个新的结构体,表示一个汽车修理工 type Mechanic struct {} // 定义一个方法,表示汽车修理工的修理汽车的功能,这是汽车修理工的单一职责 func (m *Mechanic) Repair(c *Car) { fmt.Println("The car is being repaired.") }
// 定义一个接口,表示一个汽车 type Car interface { Drive() } // 定义一个结构体,表示一个奔驰汽车 type BenZ struct{} // 实现奔驰汽车的驾驶方法 func (b *BenZ) Drive() { fmt.Println("Driving a BenZ.") } // 定义一个结构体,表示一个宝马汽车 type Bmw struct{} // 实现宝马汽车的驾驶方法 func (b *Bmw) Drive() { fmt.Println("Driving a Bmw.") } // 定义一个接口,表示一个驾驶员 type Driver interface { Drive(car Car) } // 定义一个结构体,表示一个驾驶员张三 type Zhangsan struct{} // 实现张三的驾驶方法 func (z *Zhangsan) Drive(car Car) { fmt.Println("Zhangsan is driving.") car.Drive() } // 定义一个结构体,表示一个驾驶员李四 type Lisi struct{} // 实现李四的驾驶方法 func (l *Lisi) Drive(car Car) { fmt.Println("Lisi is driving.") car.Drive() } func main() { // 张三驾驶奔驰 var benz Car benz = new(BenZ) var zhang3 Driver zhang3 = new(Zhangsan) zhang3.Drive(benz) // 李四驾驶宝马 var bmw Car bmw = new(Bmw) var li4 Driver li4 = new(Lisi) li4.Drive(bmw) }
在这个例子中,Driver 接口依赖于 Car 接口,而不是依赖于具体的 BenZ 或 Bmw 结构体。这就是依赖倒转原则的体现。