I've made far and wide application of many of the patterns in several projects. Because different extension objects may be configured to run in different processes, I needed a way to determine what extensions were available to the extension factory in a process. I took advantage of run-time initialization to register extension creators with the extension factory singleton. By merely linking different object files in the executable, different extensions are available.
H describes a generic extension.
H is the singleton extension factory residing in a process. C implements the extension factory. H contains the abstract interface for creating extensions. In addition, there's a templated class that simplifies registering of new extension creators with the extension factory.