3

背景:

我有一个类列表(comm对象),它可能会增加也可能不会增加。它们都在接口 Comms 中实现相同的方法:

public int send(Socket socket, byte[] message);

我通过在方法的 packageName 参数中指定包名来获取这些comm类的列表(在函数内部不包括包名本身并进行一些过滤以仅获取名称包 comm):

public static Class[] getClasses(String packageName); (modified it a bit from the link below)

http://www.dzone.com/snippets/get-all-classes-within-package

然后我有几个插件可配置为使用其中一个 comm 对象作为基本通信。

通讯对象:


串行

客户

服务器

等等


插件:


插件1

插件2

等等


管理器类将接收来自插件的发送控制数据包的请求,管理器只会将请求排队并为每个请求调用发送函数

问题:

如何访问send(Socket socket, byte[] message);管理器或插件本身中的方法?这涉及创建一个可以调用 send 的通用类对象,根据插件配置,从 comm 对象的字符串名称从 comm 类之一转换。

每个插件使用哪个 comm 类的配置存储在数据库中。从字符串转换为 Class 对象效果很好。我只需要找到一种方法来调用驻留在接口 Comm 中的发送函数,该接口由所有 comm 类实现。这必须是通用的。可能会添加更多的通讯类。

4

1 回答 1

1

给管理器一个引用类型的Comm接口并调用它的send方法。

当您实例化管理器时,将其注入您希望的实现。

听起来您已经有了虚拟构造函数/工厂模式来实例化每种类型的Comm实现。

这是所有依赖注入引擎(例如 Spring、Guice 等)的通用模式。

于 2013-05-15T11:25:06.013 回答