Middle
163
Kāda ir atšķirība starp dizaina modeļiem Builder un Facade?
Atbilde no AI
sobes.tech AI
Builder фокусируется на пошаговом конструировании сложного объекта, отделяя процесс создания от его представления. Он позволяет использовать один и тот же процесс конструирования для создания различных представлений объекта.
Facade предоставляет унифицированный интерфейс к набору интерфейсов в подсистеме. Он определяет высокоуровневый интерфейс, который делает подсистему более простой в использовании.
Основные отличия:
- Назначение: Builder для создания объектов, Facade для упрощения доступа к подсистемам.
- Фокус: Builder на процессе конструирования, Facade на упрощении использования.
- Применение: Builder часто используется для объектов с большим количеством необязательных параметров или сложным процессом инициализации. Facade применяется для сокрытия сложности подсистемы и предоставления более удобного API.
Пример Builder (упрощенный):
// Пример класса с множеством параметров
class Car {
private String engine;
private String transmission;
private int wheels;
// Приватный конструктор для принудительного использования Builder
private Car(Builder builder) {
this.engine = builder.engine;
this.transmission = builder.transmission;
this.wheels = builder.wheels;
}
// Вложенный класс Builder
public static class Builder {
private String engine;
private String transmission;
private int wheels = 4; // Значение по умолчанию
public Builder setEngine(String engine) {
this.engine = engine;
return this;
}
public Builder setTransmission(String transmission) {
this.transmission = transmission;
return this;
}
public Builder setWheels(int wheels) {
this.wheels = wheels;
return this;
}
public Car build() {
return new Car(this);
}
}
// Геттеры (для примера)
// ...
}
// Использование Builder
class Main {
public static void main(String[] args) {
Car myCar = new Car.Builder()
.setEngine("V8")
.setTransmission("Automatic")
.build();
}
}
Пример Facade (упрощенный):
// Простая подсистема
class Engine {
public void start() {
System.out.println("Engine starting...");
}
}
class Gearbox {
public void shiftUp() {
System.out.println("Shifting up...");
}
}
// Facade для запуска автомобиля
class CarFacade {
private Engine engine = new Engine();
private Gearbox gearbox = new Gearbox();
public void startCar() {
engine.start();
gearbox.shiftUp();
System.out.println("Car started.");
}
}
// Использование Facade
class Main {
public static void main(String[] args) {
CarFacade carFacade = new CarFacade();
carFacade.startCar();
}
}