@Bert - (1) легко решается, если другие методы в классе терпят неудачу, если класс не инициализирован; (2) вы уже указали решение. В более сложных версиях этого шаблона я обычно вижу «инициализированный» логический элемент, отслеживающий это состояние, поскольку обычно инициализируется более одного поля.

еняемые классы - это здорово, но есть одна большая проблема, которую я не могу придумать, - это циклы.

class Friend {
   Set<Friend> friends();
}

Как один из моделей «Я» имею Тебя как друга, который, в свою очередь, возвращает меня в друзья?

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

Ответы на вопрос(3)

Ваш ответ на вопрос