Определение: отделяйте построение сложного объекта от его представления, чтобы один и тот же процесс строительства мог создавать различные представления.
Тип: Создать диаграмму класса класса класса:
Четыре элемента
Реализация кода
Аннотация класс продуктов:
Сборщик пакетов; импортировать java.util.arraylist; Public Abstract Class AbstractProduct {// Запись заказа выполнения частного ArrayList <String> part = new ArrayList <String> (); Общественная абстрактная void dosomething (); Общественная абстрактная void dootherthing (); // Окончание, подклассы не могут быть переопределены окончательным public void executive () {for (int i = 0; i <this.part.size (); i ++) {string actionname = this.part.get (i); if (actionname.equals ("dosomething")) {this.dosomething (); } else if (actionname.equals ("dootherthing")) {this.dootherthing (); } / }}Категория реализации продукта:
Сборщик пакетов; Public Class Product расширяет AbstractProduct {// Специфическое описание подкласса } public void dootherthing () {System.out.println («Что -то сделано. Источие будет сделано ...»); }}Класс абстрактного строителя:
Сборщик пакетов; импортировать java.util.arraylist; Public Abstract Class Builder {// Установить разные части продукта для получения различных продуктов Public Abstract void SetPart (ArrayList <string> part); // Создание продукта Public Abstract Product BuildProduct (); }Класс внедрения строителя:
Сборщик пакетов; импортировать java.util.arraylist; Public Class ConceteProduct Extends Builder {Product Product = новый продукт (); public void setPart (arraylist <string> part) {this.product.setPart (part); } public product buildproduct () {return this.product; }}Категория директора:
Сборщик пакетов; импортировать java.util.arraylist; // Переупаковка производственного порядка различных продуктов и блокировать детали высокоуровневого директора открытого класса {private ArrayList <string> part = new ArrayList <string> (); Частный строительный строитель = новый ConceteProduct (); общедоступный продукт getAproduct () {this.part.clear (); this.part.add ("dosomething"); this.part.add ("Dootherthing"); Builder.SetPart (часть); return Builder.buildProduct (); }}Клиент:
Сборщик пакетов; Public Class Client {public static void main (string [] args) {директор директор = новый директор (); System.out.println («будет генерировать 10 продуктов»); for (int i = 1; i <11; i ++) {System.out.println ("Thread" + i + "продукты"); Director.getAproduct (). Executive (); System.out.println (); }}}
Преимущества модели строителя
Во -первых, модель застройщика имеет очень хорошую инкапсуляцию. Использование модели строителя может эффективно инкапсулировать изменения. В сценарии использования модели строителя общие категории продуктов и категории строителей являются относительно стабильными. Таким образом, инкапсулирование основной бизнес -логики в категории директоров может достичь лучшей стабильности в целом.
Во -вторых, режим застройщика легко расширить. Если есть новое требование, это может быть сделано, внедрив новый класс застройщиков. По сути, нет необходимости изменять код, который был протестирован и прошел ранее, поэтому для исходной функции не будет риска.
Разница между моделью строителя и заводской моделью
Мы видим, что модель застройщика очень похожа на заводскую модель. В целом, модель Builder играет только одну еще одну «директор», чем заводская модель. На диаграмме класса схемы застройщика, если класс директора рассматривается как конечный клиент, то оставшаяся часть в диаграмме может рассматриваться как простой заводской шаблон.
По сравнению с заводской моделью модель строителя обычно используется для создания более сложных объектов. Поскольку процесс создания объекта является более сложным, процесс создания объектов не зависит от процесса создания объектов, чтобы сформировать новый класс - класс директоров. Другими словами, заводская модель инкапсулирует весь процесс создания объекта в классе фабрики, а заводский класс предоставляет конечный продукт клиенту; В то время как в модели Строителя класс застройщиков, как правило, обеспечивает только конструкцию каждого компонента в классе продукта и предоставляет конкретный процесс строительства для класса директора. Класс директоров несет ответственность за формирование каждого компонента в продукт в соответствии с конкретными правилами, а затем доставлять сформированный продукт клиенту.
Суммировать
Модель застройщика аналогична заводской модели. Они оба являются моделью строителя, и применимые сценарии также очень похожи. Вообще говоря, если строительство продукта сложна, используйте заводскую модель; Если строительство продукта более сложна, используйте модель строителя.