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