Я изучаю паттерн GRASP в школе, и у меня есть вопрос о паттерне Creator.
Допустим, у вас есть три класса, Компьютер , UserRespository и Пользователь .
Одно из правил шаблона GRASP Creator говорит вам назначить ответственность за создание объекта на класс, содержащий этот объект. Следуя этому руководству, UserRepository должен быть создателем пользователя.
Так что, если Компьютер хочет создать пользователя, он спросит UserRespository.
//in Computer's code
repo.createUser("John");
//in UserRepository
public void createUser(String name)
{
users.add(new User(name));
}
Это эффективно отделяет Компьютер от Пользователь . Действительно?
Ясно, что Компьютер не имеет никакого отношения к Пользователю, но я думаю, что Компьютер все еще тесно связан с созданием Пользователя. Зачем? Метод createUser плохо скрывает создание. Если Пользователь изменит свой конструктор, вам придется изменить метод createUser , чтобы отразить эти изменения, а также каждый клиент, использующий метод.
В чем преимущество использования этого паттерна?