Refactoring and Design Patterns