design patterns for tool