Многие Builder Pattern
примеры делают Builder
внутренний класс объекта, который он создает.
Это имеет некоторый смысл, поскольку указывает на то, что Builder
строит. Однако в статически типизированном языке мы знаем, что Builder
строит.
С другой стороны, если Builder
это внутренний класс, вы должны знать, какой класс Builder
строит, не заглядывая внутрь Builder
.
Кроме того, наличие конструктора в качестве внутреннего класса уменьшает количество импортов, так как на него может ссылаться внешний класс - если вы заботитесь об этом.
И затем есть практические примеры, когда Builder
объект находится в одном пакете, но не во внутреннем классе, например StringBuilder
. Вы знаете, что Builder
должен построить, String
потому что он назван так.
При этом единственная причина, по которой я могу придумать создание Builder
внутреннего класса, состоит в том, что вы знаете, что такое класс « Builder
, не зная его имени и не полагаясь на соглашения об именах. Например, если бы это StringBuilder
был внутренний класс, String
я, вероятно, знал бы, что он существует раньше, чем я (умозрительный).
Есть ли другие причины делать Builder
внутренний класс или он просто сводится к предпочтениям и ритуалам?
источник
В этом случае нет «должен». Определение построителя внутри другого класса или его отделение ортогонально шаблону Строителя. Многие примеры делают это из-за удобства представления кода в одном согласованном файле (также для доступа к закрытым членам, но это также зависит от контекста). Не стесняйтесь делать иначе
источник