在 Go 中实现抽象类
Go 由于注重安全性和简单性,本身并不支持抽象类。但是,有一些解决方法可以模拟抽象行为。
原始问题
该问题讨论了 Go 接口中无法实现默认实现的问题。由于 Go 中的接口不能包含字段,因此实现具有默认行为的无状态对象具有挑战性。
使用抽象守护进程的解决方法
提供的解决方案采用了一个抽象守护进程来服务作为接口和具体实现之间的中介。
type AbstractDaemon struct { Daemon }
抽象守护进程通过其接收接口结构守护进程字段。这允许在抽象守护进程中定义默认行为。
func (a *AbstractDaemon) start(duration time.Duration) { // Default implementation for start }
具体实现
具体实现嵌入抽象守护进程并定义自己的 doWork 方法:
type ConcreteDaemonA struct { *AbstractDaemon foo int } func (a *ConcreteDaemonA) doWork() { // Custom implementation for ConcreteDaemonA }
实例化和用法
具体实现可以实例化并用作接口类型:
var dA Daemon = newConcreteDaemonA() dA.start(1 * time.Second)
评估
此解决方法提供了一种方法通过将默认行为与接口解耦并在单独的抽象结构中定义它们来实现 Go 中的抽象类。这是 Go 中常用的方法,尽管存在语言限制,但仍可实现抽象行为。
以上是如何在 Go 中模拟抽象类行为?的详细内容。更多信息请关注PHP中文网其他相关文章!