Java命令对象与方法
我正在考虑一个我刚刚编写的模块的API。我有很多命令,每个命令都有不同的参数、模式等等。例如,我可以在不同的地址模式下应用命令(Java命令对象与方法,java,api-design,garbage,command-pattern,Java,Api Design,Garbage,Command Pattern,我正在考虑一个我刚刚编写的模块的API。我有很多命令,每个命令都有不同的参数、模式等等。例如,我可以在不同的地址模式下应用命令(unaddress、Address、SELECTED,…) 根据这一点,我们可能需要参数中的地址,也可能不需要 我想知道如何将这样的API公开为Java接口。 最后,这些命令触发一些通过以太网连接的硬件 目前,我有两个想法: 命令对象:void doA(CommandA c)其中CommandA将所有参数/模式信息作为字段保存。我现在必须签入doA是否是有效的参数组合
unaddress、Address、SELECTED,…
)
根据这一点,我们可能需要参数中的地址,也可能不需要
我想知道如何将这样的API公开为Java接口。
最后,这些命令触发一些通过以太网连接的硬件
目前,我有两个想法:
void doA(CommandA c)
其中CommandA
将所有参数/模式信息作为字段保存。我现在必须签入doA
是否是有效的参数组合doA_VariantI(int-param1,byte[]param2,byte[]payload,…)
和doA_VariantI(int-param1,byte[]payload,…)
方法重载可能是排除无效参数组合的最安全方法。但我必须为每个命令创建6-7个重载(我希望避免)。好处是所有参数都在堆栈上,而命令对象将创建大量垃圾
我想知道是否有人可以分享一些关于这方面的经验。垃圾真的是一件值得担心的事情吗?“好处是所有参数都在堆栈上,而命令对象将创建大量垃圾。”好的,只有
int
s和对字节[]
s的引用才会在堆栈上。byte[]
s本身仍然需要进行垃圾收集。嗯,是的,我忘了提到byte[]
实际上是预先分配的缓冲区。所以byte[]payload
实际上意味着byte[]buf,int offset,int length