Bridge Pattern in C#:

Decoupling Abstraction from Implementation