Figure 1: Class hierarchy that supports multiple protocols with a common interface