会是什么的去程部分提供了一个默认的实现?
为了说明这一点,下面的切换开关驱动程序的简单示例是我按照我的 OO 直觉结束的死胡同......当然它不会编译(我知道为什么),我不一定愿意这样做。任何其他更适合 go 哲学的解决方案实际上会更好地正确理解这种常见需求的 go-way。
完整的例子也可以在https://play.golang.org/p/MYED1PB-dS找到
鉴于以下接口:
type ToggleSwitch interface {
TurnOn()
TurnOff()
IsOn() bool
Toggle()
}
Toggle() 是提供默认实现的一个很好的候选者(即,根据当前状态,打开或关闭开关):
// The Toggle() method can already be defined using TurnOn, TurnOff() and IsOn().
type DefaultDriver struct {
}
// The following implementation would be fine for non-optimized cases:
func (d *DefaultDriver) Toggle() {
state := d.IsOn()
fmt.Println("generic toogle ->", state)
if state {
d.TurnOff()
} else {
d.TurnOn()
}
}
然后一个实际的驱动程序可以使用或不使用它:
// Example of an actual ToggleDriver which should fully implement the interface
// based on the default implementation or not.
// For example, if the toggle switch device has a bult-in toggle command, the
// Toggle() method could be optimized to directly use it.
type DummyDriver struct {
*DefaultDriver // promote DefaultDriver methods
state bool
}
func (d *DummyDriver) IsOn() bool {
return d.state
}
func (d *DummyDriver) TurnOff() {
d.state = false
}
func (d *DummyDriver) TurnOn() {
d.state = false
}
// Uncomment me to optimize me...
//func (d *DummyDriver) Toggle() {
// fmt.Println("specialized toogle ->", d.state)
// d.state = !d.state
//}
青春有我
料青山看我应如是
相关分类