Here's an example of multiple implementations, two basic ones, and a third fusing them together, all using the same interface.