您可以将其称为插件,插件或 以后与原始软件连接的额外代码 ,真的没关系。我很想了解它们是如何工作的,必须对如何设计插件系统进行简单的解释。不幸的是,我从来没有理解过,在我的脑海里仍然存在许多悬而未决的问题。例如,程序如何找到插件?它是如何与它接口的?什么时候软件最好有插件系统?
感谢所有有用的答案。看来我问过于开放的问题,幸运的是我找到了关键词。我喜欢David回答虽然我不是Java人,但他的谈话对我来说很有意义:))
答案 0 :(得分:7)
interface
特定类型的所有插件将实现Assembly.LoadFile()
)如果你想查看一些源代码,Paint.NET是免费的开源代码,并且有一个插件架构。
答案 1 :(得分:6)
插件的工作方式是遵循主应用程序期望使用的众所周知的接口。
插件架构实际上有多种工作方式,但总的来说,这些步骤是:
以下是应用程序可以找到插件的两种方式(多种方式):
当找到插件时,应用程序会加载它们(有时是类加载器的作业)。
软件架构师可能会设计插件架构,因为他们希望软件提供商或用户社区能够实现原本不属于系统的新功能。两个很好的例子是Eclipse和Firefox;其他应用程序包括Adobe Photoshop(用于艺术技术和图形工具)和Winamp(用于可视化)。
答案 2 :(得分:1)
程序通常必须设计为寻找插件,并且插件必须具有标准访问点以接受来自主程序的控制。每个应用程序或网站都会有所不同。
最简单的插件类型是这样的:
if (a plug-in exists/is configured)
call predefined plug-in code
在这种情况下,主程序被编码为仅处理一组特定的插件(许多基于php的wordpress模板都是这样的)。一个稍微高级的插件
perform application specific logic
if any plug-in exists that exposes the run_after_app_specific_logic function
call plug-in code
第二种情况可以处理非常复杂的插件......插件只需要实现主程序调用的更多功能。
答案 3 :(得分:1)
Eclipse是一个应用程序框架示例,它基于完全基于插件,这意味着所有功能都是作为插件实现的。底部有一个薄层用于启动/关闭和插件管理,但其他所有内容都是作为插件实现的。这导致了一个可以用于几乎所有事情的框架。有关Eclipse插件架构的更多信息,请访问:http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html。
答案 4 :(得分:1)
它非常依赖语言。
在解释语言中,它只涉及调用遵循模式的文件。
在C中,没有帮助就很难做到。在C +窗口中,“DLL”可以是插件,并且通常以这种方式使用。
在带反射的OO语言中,您可以创建一个实现接口并反射加载它的对象。加载后,您可以忽略它是一个插件这一事实,因为它被视为代码中的任何其他对象。
.net有一个插件架构(它是COM吗?)好吧无论如何COM可以用作(是?)一个插件系统。
由于所有可能性,你的问题可能过于开放。没有一个答案。
答案 5 :(得分:1)
我从未编写过插件系统。但这就是我脑海中的想象:
答案 6 :(得分:0)
插件系统可以通过多种方式实现,但许多C / C ++应用程序的常用方法是基于DLL的插件SDK。
DLL将公开各种自动函数调用,这些调用可能允许插件在正在运行的应用程序中“自行设置”,例如为系统添加菜单项,新功能或额外选项(如3D渲染实现)。
答案 7 :(得分:0)
更多的是没有任何特殊的发现 - 插件机制通常是愚蠢的:这是我理解的代码签名,这是我可以做的一个电话。我不知道我打电话的是怎么做的,但我希望结果是某种格式。这几乎是一份合同。现在 - 该插件将实现合同并使其自身可用。在Java中,例如“make available”只是意味着实现类被加载到内存中。特定数据库的JDBC驱动程序就是一个很好的例子。