Java 我的代码如何适应修改/插件?

Java 我的代码如何适应修改/插件?,java,api,plugins,Java,Api,Plugins,一般来说,我如何编写程序来适应修改或插件?每个方法都包含其他行为吗?我所有的搜索结果都是用来编写插件和mod本身的资源;我找不到任何关于写系统的东西。关于java,如何在不使用反射的情况下向其他系统公开逻辑的内部部分?一种方法是创建自己的类加载器,该加载器可以从系统类路径之外的指定位置加载类。如果它在系统类路径上,系统类加载器将首先找到类,而您将无法卸载它们。创建实例需要一些反射,但是一旦创建了实例,您就可以像对待其他实例一样对待它们 这是因为,尽管只有自定义类加载器知道这些实例的实际类,但它从

一般来说,我如何编写程序来适应修改或插件?每个方法都包含其他行为吗?我所有的搜索结果都是用来编写插件和mod本身的资源;我找不到任何关于写系统的东西。关于java,如何在不使用反射的情况下向其他系统公开逻辑的内部部分?

一种方法是创建自己的类加载器,该加载器可以从系统类路径之外的指定位置加载类。如果它在系统类路径上,系统类加载器将首先找到类,而您将无法卸载它们。创建实例需要一些反射,但是一旦创建了实例,您就可以像对待其他实例一样对待它们

这是因为,尽管只有自定义类加载器知道这些实例的实际类,但它从系统类加载器中获得了它们的超类(即插件类或接口)的定义。因此,由系统类加载器加载的其他类(即程序的其余部分)可以通过它们的超类引用那些动态创建的实例


我曾经找到扩展插件类的类。

查看。在一个简单的模型中,扩展将实现一个或多个接口,而这些接口又将使用一个或多个主机接口。也就是说,内部逻辑不是直接公开的,而是通过定义的契约公开的。通过使用接口,代码通常可以自由地在主机和扩展之间传递隐藏在接口后面的实际对象或也实现所述接口的代理/外观对象,但是,只有接口/契约。因此,我应该将自己的实现/行为作为许多可能的行为之一编写,允许插件指定自己的实现并扩展我的类?如果有一个组件的行为是我想要保证的,但也允许插件扩展,那该怎么办呢?关键是确定应该扩展什么,以及如何扩展。是在一系列规则的末尾添加一条规则吗?是否为特定条件添加新的分派/处理程序?它是否提供默认值?它是否提供替换部件?它是否对事件作出反应/覆盖事件?