2011-12-14 4 views
2

У меня есть Class A с довольно большим количеством переменных-членов. Чтобы сделать его неизменным и проверять переменные-члены во время построения, я сделал его конструктор закрытым и использовал внутренний открытый класс статического строителя (ClassABuilder) для его создания. (Джошуа Блох Эффективная Java, пункт 2).Наследование класса, построенного с использованием статического внутреннего класса Builder

Теперь я не понимаю, как другие программисты будут подклассы Class A, чтобы реализовать свое собственное поведение. Я прочитал недостатки шаблона Builder из книги, но не заметил, что подклассификация упоминается как одна. Я что-то упускаю? Есть ли элегантный способ обойти это?

Создание конструктора protected было одной из моих мыслей, но оно все равно будет принимать статические ClassABuilder, поэтому как добавить новые переменные-члены в подкласс?

ответ

2

Создать внутренний публичный статический ClassBBuilder строитель в ClassB, который является подкласс ClassABuilder

+0

Это работает. Это какой-то анти-шаблон или что-то, что обычно делается? – Abe

+1

Это объектно-ориентированный дизайн. Затем вы можете просто добавить в ClassBBuilder дополнительные переменные-члены, которые были добавлены в ClassB. – Jonathan

0

Почему конструктор A использует параметр Buildler в качестве параметра. Когда пользователь вызывает Builder.create, строитель должен инициализировать защищенный по умолчанию конструктор A, а затем просто установить поля A. Таким образом, B вы можете легко наследовать класс B от A

+0

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

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