Что это? Конструктор – это шаблон творческого проектирования, который используется для создания сложного объекта из простых объектов с использованием пошагового подхода
Аналогия с Реальным Миром: Если вы когда-либо были на веб-сайте Tesla, вы, должно быть, видели, что у них есть пошаговый способ выбора автомобиля, который начинается с базовой модели, и пользователь может продолжать добавлять функции по своему усмотрению. Это можно сделать в коде, развернув конструктор и имея все возможные комбинации, но что, если будет введена новая функция.
Решение Ответ – шаблон проектирования конструктора. Шаблон построения предполагает, что вы извлекаете код построения объекта из его собственного класса и перемещаете его в отдельные объекты, называемые построителями. Вместо того, чтобы выдвигать конструктор для обработки всех случаев, мы строим автомобиль, используя функции, выбранные пользователем.
Пример кода:
public class Director {
BuilderInterface myBuilder;
public void construct(BuilderInterface builder) {
myBuilder = builder;
myBuilder.buildBody();
myBuilder.insertWheels();
myBuilder.addHeadlights();
}
}
public class Product {
private LinkedList parts;
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”