Как навязать отношения «имеет» и защитить объект, который «имеет» - PullRequest
1 голос
/ 18 февраля 2009

С учетом следующего кода:

Class User{
  Task m_Task;  
  public function getTask("Do work") { return m_Task; }
}

Class Project{
  Task m_Task;  
  public function getTask("Do work") { return m_Task; }
}

Class Task {
  private m_Name;
  public Task(name) { m_Name = name; }
}

Class Evil {
  new Task = Error
}

На языке, который не поддерживает множественное наследование, вложенные классы или частные классы (частный конструктор не является опцией), как вы можете разработать требование, чтобы Task всегда создавался только через пользователя или проект? В идеале использовать только языковые конструкции вместо кода. Есть ли шаблон дизайна?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2009

Не совсем ответ, вы можете создать задачу из другого места, но вам нужен действительный экземпляр задачи, чтобы сделать это ..

public class Task {
   public Task (User u, String name)
   {
     if (u==null) throw new UnsupportedOperationException("that's cheating");
     this.name=name;
   }
}

В крайнем случае, если вы создаете требование, чтобы Task было внешним для пользователя, тогда что-то еще должно иметь возможность загружать конструктор задачи, поэтому я не думаю, что это возможно.

Какова цель этого вопроса? Это как-то связано с реальной ситуацией в мире?

0 голосов
/ 18 февраля 2009

Это выглядит несколько странно, но я предполагаю, что вы пишете Task конструктором, который требует в качестве аргумента пользователя и выполняет некоторое рукопожатие, чтобы связать пользователя с задачей, требуя, чтобы у пользователя еще не было задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...