Что это? Конструктор – это шаблон творческого проектирования, который используется для создания сложного объекта из простых объектов с использованием пошагового подхода
Аналогия с Реальным Миром: Если вы когда-либо были на веб-сайте Tesla, вы, должно быть, видели, что у них есть пошаговый способ выбора автомобиля, который начинается с базовой модели, и пользователь может продолжать добавлять функции по своему усмотрению. Это можно сделать в коде, развернув конструктор и имея все возможные комбинации, но что, если будет введена новая функция.
Решение Ответ – шаблон проектирования конструктора. Шаблон построения предполагает, что вы извлекаете код построения объекта из его собственного класса и перемещаете его в отдельные объекты, называемые построителями. Вместо того, чтобы выдвигать конструктор для обработки всех случаев, мы строим автомобиль, используя функции, выбранные пользователем.
Пример кода:
public class Director { BuilderInterface myBuilder; public void construct(BuilderInterface builder) { myBuilder = builder; myBuilder.buildBody(); myBuilder.insertWheels(); myBuilder.addHeadlights(); } } public class Product { private LinkedListparts; public Product () { parts = new LinkedList (); } public void add(String part) { parts.addLast(part); } public void show() { System.out.println("\n Product completed as below"); for(int i = 0; i < parts.size(); i++) System.out.println(parts.get(i)); } } public class Client { public static void main(String [] args) { System.out.println("***Builder Pattern Demo***\n"); Director director = new Director(); BuilderInterface carBuilder = new Car(); BuilderInterface motorBuilder = new MotorCycle(); // making a car director.construct(carBuilder); Product p1 = carBuilder.getVehicle(); p1.show(); // making a motorcycle director.construct(motorBuilder); Product p2 = motorBuilder.getVehicle(); p2.show(); } } interface BuilderInterface { void buildBody(); void insertWheels(); void addHeadlights(); Product getVehicle(); } class Car implements BuilderInterface { private Product product = new Product(); @Override public void buildBody() { product.add("This is a body of a car"); } @Override public void insertWheels() { product.add("4 wheels are added"); } @Override public void addHeadlights() { product.add("2 headlights are added"); } @Override public Product getVehicle() { return product; } } class MotorCycle implements BuilderInterface { private Product product = new Product(); @Override public void buildBody() { product.add("This is a body of a Motorcycle"); } @Override public void insertWheels() { product.add("2 wheels are added"); } @Override public void addHeadlights() { product.add("1 Headlight has been added"); } @Override public Product getVehicle() { return product; } }
Преимущество:
- Это обеспечивает четкое разделение между конструкцией и представлением объекта.
- Это обеспечивает лучший контроль над процессом строительства.
- Он поддерживает изменение внутреннего представления объектов.
- Принцип единой ответственности.
недостатки
- Сложность кода возрастает.
Ссылка на Github: Шаблон дизайна конструктора репозитория Github
Оригинал: “https://dev.to/amrindersinghdev/builder-design-pattern-41d6”