[英]What's an appropriate design pattern to call outer struct's method? [closed]
例如,我有一个父结构Connection
和一个子结构Dialect
如下:
type Connection struct {
conn *net.TCPConn
databaseDialect DatabaseDialect
}
func (c *Connection) modifySQL(sql string) (string, error) {
}
// Close cleans up
func (c *Connection) Close() error {
...
}
func (c *Connection) handleConnection() error {
c.databaseDialect = &PostgreSQLDialect{
conn: c.conn,
modifySQLFunc: c.modifySQL,
}
return dialect.HandleConnection()
}
type DatabaseDialect interface {
HandleConnection()
}
type PostgreSQLDialect struct {
conn *net.TCPConn
modifySQLFunc func(string) (string, error)
}
func (d *PostgreSQLDialect) HandleConnection() error {
buff := make([]byte, 0xffff)
d.conn.Read(buff)
sql := parseToSQL(buff) // parse buffer to SQL statements
// call outer's function here
sql, err = d.modifySQLFunc(sql)
...
}
可以看到外层 function modifySQL
在PostgreSQLDialect
中传递。 但事情可能更复杂。 假设我们需要调用更多的外部函数。 例如,当连接关闭时。 我们需要调用外部的 function Close()
来清理资源。 所以我很好奇PostgreSQLDialect
是否需要对外部结构Connection
有一个引用变量。 但我只是觉得让我的代码架构良好并不是一个好的设计。
有没有适合这种情况的设计模式? 欢迎任何开源 repo、源代码或文章。
本文暂无回复,试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.