2009-06-13 5 views
2

Я изучаю шаблон GRASP в школе, и у меня есть вопрос о шаблоне Творца.Разве GRASP Creator действительно отделяется?

Скажем, у вас есть три класса, Компьютер, UserRespository и пользователя.

В одном из правил шаблона GRASP Creator вы должны назначить ответственность за создание объекта классу, содержащему этот объект. Следуя этому руководству, UserRepository должен быть создателем User.

Так что если компьютер хочет создать пользователя, он попросит UserRespository.

//in Computer's code 
repo.createUser("John"); 


//in UserRepository 
public void createUser(String name) 
{ 
    users.add(new User(name)); 
} 

Это эффективно разъединять компьютер от пользователя. В самом деле?

Очевидно, Компьютер не имеет ссылки на пользователя, но я думаю, что компьютер по-прежнему очень связан с созданием Пользователя. Зачем? Метод createUser плохо скрывает создание. Если Пользователь измените его конструктор, вам нужно будет изменить способ createUser, чтобы отразить эти изменения, а также каждый клиент, используя этот метод.

В чем преимущество использования этого шаблона?

ответ

1

Я узнал, что развязка действительно спрашивает: «Вы можете извлечь этот класс из системы?». Таким образом, скрывая создание объекта за методом, учитывая, что этот объект не используется нигде, кроме как в создателе, он эффективно отделяет объект от системы.

0

Развязка возникает из-за того, что объект репозитория может быть произвольным; то есть вы можете выбрать, какой объект репозитория должен пройти в объект компьютера. Хотя по-прежнему существует метод CreateUser, источник данных пользователя определяется тем, какой объект репозитория используется.

В вашем примере объект репозитория обычно назывался бы объектом UserRepository.

 Смежные вопросы

  • Нет связанных вопросов^_^