Extensibility and design patterns