Sobes.tech
Назад к вопросам
Middle
133

В чем заключается разница между шаблоном проектирования Builder и шаблоном проектирования Facade?

Ответ от нейросети

sobes.tech AI

Шаблон Builder предназначен для поэтапного создания сложного объекта с возможностью гибкой настройки его параметров. Он отделяет процесс конструирования объекта от его представления, позволяя создавать разные варианты объекта с одинаковым процессом сборки.

Пример использования Builder:

public class Car {
    private String engine;
    private int wheels;
    private String color;

    private Car(Builder builder) {
        this.engine = builder.engine;
        this.wheels = builder.wheels;
        this.color = builder.color;
    }

    public static class Builder {
        private String engine;
        private int wheels;
        private String color;

        public Builder setEngine(String engine) {
            this.engine = engine;
            return this;
        }

        public Builder setWheels(int wheels) {
            this.wheels = wheels;
            return this;
        }

        public Builder setColor(String color) {
            this.color = color;
            return this;
        }

        public Car build() {
            return new Car(this);
        }
    }
}

Шаблон Facade предоставляет упрощённый интерфейс к сложной системе классов, библиотеке или фреймворку. Он скрывает сложность подсистемы и облегчает взаимодействие с ней.

Пример Facade:

public class ComputerFacade {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public ComputerFacade() {
        cpu = new CPU();
        memory = new Memory();
        hardDrive = new HardDrive();
    }

    public void start() {
        cpu.freeze();
        memory.load(0, hardDrive.read(0, 1024));
        cpu.execute();
    }
}

Ключевые различия:

  • Builder фокусируется на создании объекта шаг за шагом.
  • Facade упрощает взаимодействие с уже существующей сложной системой.

Таким образом, Builder помогает создавать объекты, а Facade — упрощать использование подсистем.