Say I am writing a user interface for a hardware accessory. There are two versions of the accessory – let’s say Widget Lite and Widget Pro.
Widget Pro can do everything that Widget Lite can do, but with a few more options and can do a few things that Widget Lite can’t. In more detail, Widget Lite has one channel, widget Pro has two, so when it comes to something analogous to volume control, I need only one control for the Lite, but two for the Pro allowing independent control.
In my first attempt at building an application to handle this, I had the class representing Widget Pro extend Widget Lite, but then I’ve ended up with all sorts of conditional cases to handle the differences which seems ugly. Does anyone know a suitable design pattern to help with such a situation? My imagination is drawing a blank in coming up with synonymous situations that might help in my search.
I would do it as follows:
The common code would go into the AbstractWidget (abstract because, it shouldn’t be instantiated) and the behaviour that is different between these two classes would go into the concrete classes.