Decoupling of Object-Oriented Systems A Collection of Patterns