Designing for the Unknown
Identify the variant and invariant behaviors.
Encapsulate the invariant behaviors into a class.
Add hooks to this class to define communication protocols to other classes.
Encapsulate the variant behaviors into classes that comply with the above protocols.