已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
9天前关闭
Improve this question
我正在尝试在Golang现有库的基础上创建一个API层或软件开发工具包(SDK)。我的目标是让它在Go中具有高度的灵活性和可扩展性,这样我们就可以在不改变现有代码库的情况下添加或扩展新功能。例如,如果我正在实现一个send_msg()函数,它应该能够根据作为参数指定的消息类型发送不同类型的消息。
例如,如果我正在实现一个通用的API来发送基于以下特定消息的消息
send_msg(msg_type M1, param1....paramN);
send_msg(msg_type M2, param1....paramN);
send_msg(msg_type M3, param1....paramN);`
要实现它,我可以简单地在go中编写一个函数,如下所示(伪代码)
func send_msg(mst_type int, param1 type1.....paramN typeN)
{
case: msg_type M1
perform msg processing and sending based on M1;
case: msg_type M2
perform msg processing and sending based on M2;
case: msg_type M3
perform msg processing and sending based on M3;
default:
other type processing
}
但是上面的代码可能不是高度可扩展的。例如,如果我们希望引入新的msg_type及其相应的处理,我们需要修改现有的send_msg()函数。有没有更好的设计模式来支持可扩展插件,或者你有没有其他的设计模式或设计建议来解决这个问题?
2条答案
按热度按时间bvhaajcl1#
如果
send_msg
的调用者使用常量作为第一个参数,那么为每个消息类型编写一个函数,并直接调用该函数。例如,transform:收件人:
当调用者使用变量指定消息类型时,上述转换没有用处。
另一种选择是使用Map,其中键是消息类型,值是处理该消息类型的函数。
fcipmucu2#
你可以利用Go语言接口的强大功能,并使用像命令模式或策略模式这样的设计模式。这种方法允许您添加或扩展新功能,而无需更改现有的代码库。