The basic idea is the second. But we don't implement anything in the baseclasses, so they are empty. Nevertheless they should be there to reflect the hierarchy of IInternetProtocolEx.

These baseclasses can then also be used in other places, e.g. a possible IInternetProtocolSomething that derives from IInternetProtocolRoot can also use IInternetProtocolRootPatch as a baseclass.

Putting the patches in the parent classes would require the knowledge of the most derived class in one of the parent classes since the most derived class here knows the connection to the actual singleton instance.

In this case the baseclasses also would have to be templated. Like this it is generic, exendable and clean.