'''Intent:''' Provide a way to extend the capabilities of a software system by addition rather than modification. This can range from traditional plug-ins and add-ons to an architecture built almost entirely of plug-ins. '''Motivation:''' Modifiability (Requirements change). Availability. Testability. Focused features. Limited memory footprint. ... '''Applicability:''' '''Known Uses:''' See examples in PluginArchitectures '''Related Patterns:''' OpenClosedPrinciple, PluggableArchitecture ------ '''Competitors''' * UnixWay: files/text/pipes ** It is unclear how this competes. Perhaps you can offer an example, TopMind, since you contributed it? * Mobile Code, e.g. with ScriptingLanguage, is a competitor to "hard" PluginArchitecture (i.e. where plugins are compiled separately). E.g. as JavaScript performance and communications support goes up, the need for DLL-style browser plugins goes down. * PublishSubscribeModel architectures make it easy to extend a software system by adding new processes. * BlackboardMetaphor or the centralized Database design also allows a multi-process alternative to DLL-style plugins. ----- '''References:''' * On Plug-ins and Extensible Architectures, by Dorian Birsan, Eclipse, http://www.acmqueue.org/modules.php?name=Content&pa=showpage&pid=286 * Creating a Plug-In Framework, by Roy Osherove, .NET example, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/pluginframework.asp * Building a Better Plugin Architecture, (Example in C++, DLLs) http://www.nuclex.org/articles/building-a-better-plugin-architecture * A working C# plugin architecture http://www.icsharpcode.net/TechNotes/ProgramArchitecture.pdf ---- '''See also:''' OpenClosedPrinciple, PluginArchitectures, PluggableArchitecture