For that I am using Brainiacs all over the place. The Brainiac is a little class, that uses NSNotification to figure out suitable subclasses for handling some unspecified stuff. There is a priority scheme involved, there maybe user selection, and there is NSUserDefaults also somewhere in the mix.
One kind of Brainiac, the FilesystemGenericBraniac for example is used on files, to edit them or retrieve icons of a particular file. The MulleIDE supplies the FilesystemGenericBraniac which offloads the work to the operating system :). More specialized Brainiacs can be written that do more.
Another type of Brainiac are RenderBraniacs, that are used to write the internal representation into Make, JAM or Antfiles. MulleIDE will just supply a MakeRenderBrainiac. In the distant future it would be nice to also have an import Brainiac, that imports regular Makefile into the internal representation.
There will be very little subclassing for subclass writers in this environment, possibly none, except maybe for Brainiac classes.