Self-registering plug-ins: an architecture for extensible software

Extensibility and flexibility are essential characteristics of today's software. A common technique that offers these vital features is the concept of plug-ins, in which additional components are able to easily "plug" into the application on-demand to provide extra features or functionality. Plug-ins are indispensable in software as they offer tremendous advantages in terms of giving the application simplified means to keep pace with today's rapidly changing technology. This paper describes a powerful and flexible plug-in architecture, which builds upon an improved version of the pluggable factories design pattern. The framework for the plug-in architecture in this paper consists of a registry implemented via a map that would contain a reference to each plug-in, which is used to create instances of it upon request. The plug-in is automatically self-registered at start-up before any code is executed by using static instantiation. Thus, new plug-ins are dynamically recognized without any interference from the user