Назад к вопросам
Middle
70
questionbank
В чем заключается разница между шаблонами проектирования Builder и Facade?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
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();
}
}