1. Концепция модели строителя
Определение: отделяйте сложную конструкцию объекта от его представления, чтобы один и тот же процесс строительства мог создавать разные представления;
Ядро: отдельная конструкция и представление, разные представления отличаются от абстрактных заводских моделей при конструкции:
(1) Подобно абстрактному заводскому шаблону, потому что он также может создавать сложные объекты. Основное отличие состоит в том, что модель застройщика фокусируется на построении сложного объекта шаг за шагом, сосредоточившись на порядок типа части и процесса сборки. Абстрактная заводская модель фокусируется на нескольких сериях объектов продукта (простые или сложные). Узор застройщика возвращает продукт на последнем шаге, а для абстрактной фабрики продукт немедленно возвращается.
(2) В режиме застройщика есть руководитель, который управляет строителем. Пользователь связывается с руководителем, и руководитель связывается с строителем и, наконец, получает продукт. То есть модель строительства может вызвать пошаговый процесс строительства.
2. его роль
(1) Роль абстрактного строителя: эта роль используется для регулирования различных компонентов продукта и абстрактного его, что, как правило, не зависит от логики применения.
(2) Роль бетонного строителя:
Эта роль реализует все методы, определенные в абстрактном строителе, и возвращает встроенный экземпляр продукта.
(3) Роль продукта (продукт):
Эта роль является сложным объектом в строительстве, и в системе будет более одной категории продукта. Эти продукты не обязательно имеют общественные интерфейсы и могут быть совершенно не связаны.
(4) Роль директора:
Персонаж несет ответственность за организацию порядка существующих модулей, а затем говорит строителю застройщика начать строительство.
3. Пример
Public Interface Builder {void buildParta (); void buildpartb (); void buildPartc (); } открытый класс BuilderImpl реализует Builder {@Override public void buildParta () {System.out.println («Построить часть A»); } @Override public void buildPartB () {System.out.println ("Build Part B"); } @Override public void buildPartc () {System.out.println ("сборка C"); }} открытый класс BuilderImpl2 реализует Builder {@Override public void buildParta () {System.out.println ("Строительную часть AA"); } @Override public void buildPartB () {System.out.println ("build part bb"); } @Override public void buildPartc () {System.out.println ("сборка CC"); }} / ** * Командир: Руководство, как построить * Комбинированный строитель */ директор открытого класса {частный строитель; Публичный директор (Builder Builder) {this.builder = Builder; } / *** Метод строительства: определяет процесс строительства* Если для его реализации необходимы другие процессы, вы можете новый командир -директор* / public void construct () {System.out.println ("Строитель директоров для строительства"); Builder.BuildParta (); Builder.buildPartb (); Builder.buildPartc (); }} публичный класс директор2 {частный строитель; Public Director2 (Builder Builder) {this.builder = Builder; } / *** Метод строительства: определяет процесс строительства* Если для его реализации необходимы другие процессы, вы можете новый командир -директор* / public void construct () {System.out.println ("Строитель команд директоров 2 для строительства"); Builder.buildPartb (); Builder.buildPartc (); Builder.BuildParta (); }} открытый тест класса {public static void main (string [] args) {Builder Builder = new BuilderImpl (); Директор директор = новый директор (Builder); / * * Тот же процесс строительства, различные модули (BuildParta, BuildPartb, BuildPartc), новая внедрение строителя * Различные процессы строительства, новый директор * Различные процессы строительства, различные модульные внедрение, новый директор, новый строительный застройщик */ Director.Construct (); System.out.println ("" "); Builder Builder2 = New BuilderImpl2 (); Директор директор2 = новый директор (Builder2); Директор2.construct (); System.out.println ("" "); Builder Build3 = New BuilderImpl2 (); Режиссер2 Director3 = новый режиссер2 (Builder3); Директор3.construct (); }}Печать:
Директор командный строитель строительства строительства строительный строительный строительный строительный строительный строитель
4. Преимущества и недостатки (1) Преимущества:
A. может позволить вам изменить внутреннее представление продукта.
B. Инкапсулируйте строительный и репрезентативный код.
C. Обеспечить контроль над этапами за пределами процесса строительства.
(2) Недостатки:
О. Существует необходимость создать различные типы продуктов по отдельности бетона.
5. Сценарии использования:
(1) Когда алгоритм создания сложных объектов должен быть независимым от компонентов объекта и того, как они собираются.
(2) Когда процесс строительства должен позволить построенному объекту иметь разные представления (тот же метод, различный порядок выполнения и различные результаты даются).