Автор оригинала: Pankaj Kumar.
Сегодня мы рассмотрим шаблон конструктора на java. Шаблон дизайна конструктора-это шаблон творческого дизайна как Фабричный шаблон и Абстрактный фабричный шаблон .
Шаблон Проектирования Строителя
Шаблон конструктора был введен для решения некоторых проблем с фабричными и абстрактными шаблонами проектирования фабрик, когда объект содержит много атрибутов.
Существуют три основные проблемы с фабричными и абстрактными шаблонами проектирования фабрик, когда объект содержит много атрибутов.
- Слишком много аргументов для передачи из клиентской программы в заводской класс, что может привести к ошибкам, потому что в большинстве случаев тип аргументов один и тот же, и со стороны клиента трудно поддерживать порядок аргументов.
- Некоторые параметры могут быть необязательными, но в заводском шаблоне мы вынуждены отправлять все параметры, а необязательные параметры необходимо отправлять как НУЛЕВЫЕ.
- Если объект тяжелый и его создание сложное, то вся эта сложность будет частью заводских классов, что сбивает с толку.
Мы можем решить проблемы с большим количеством параметров, предоставив конструктор с необходимыми параметрами, а затем различные методы настройки для установки дополнительных параметров. Проблема с этим подходом заключается в том, что состояние объекта будет несогласованным до тех пор, пока все атрибуты не будут заданы явно.
Шаблон компоновщика решает проблему с большим количеством необязательных параметров и несогласованным состоянием, предоставляя способ пошагового построения объекта и предоставляя метод, который фактически вернет конечный объект.
Шаблон проектирования конструктора на Java
Давайте посмотрим, как мы можем реализовать шаблон проектирования builder в java.
- Прежде всего, вам нужно создать статический вложенный класс , а затем скопировать все аргументы из внешнего класса в класс Builder. Мы должны следовать соглашению об именовании, и если имя класса
Computer, то класс builder должен быть назван какComputerBuilder. - Класс Java Builder должен иметь общедоступный конструктор со всеми необходимыми атрибутами в качестве параметров.
- Класс Java Builder должен иметь методы для установки необязательных параметров, и он должен возвращать тот же объект Builder после установки необязательного атрибута.
- Последним шагом является предоставление метода
build()в классе builder, который вернет объект, необходимый клиентской программе. Для этого нам нужно иметь частный конструктор в классе с классом Builder в качестве аргумента.
Вот пример кода примера шаблона конструктора, в котором у нас есть компьютерный класс и класс конструктора компьютеров для его создания.
package com.journaldev.design.builder;
public class Computer {
//required parameters
private String HDD;
private String RAM;
//optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public String getHDD() {
return HDD;
}
public String getRAM() {
return RAM;
}
public boolean isGraphicsCardEnabled() {
return isGraphicsCardEnabled;
}
public boolean isBluetoothEnabled() {
return isBluetoothEnabled;
}
private Computer(ComputerBuilder builder) {
this.HDD=builder.HDD;
this.RAM=builder.RAM;
this.isGraphicsCardEnabled=builder.isGraphicsCardEnabled;
this.isBluetoothEnabled=builder.isBluetoothEnabled;
}
//Builder Class
public static class ComputerBuilder{
// required parameters
private String HDD;
private String RAM;
// optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public ComputerBuilder(String hdd, String ram){
this.HDD=hdd;
this.RAM=ram;
}
public ComputerBuilder setGraphicsCardEnabled(boolean isGraphicsCardEnabled) {
this.isGraphicsCardEnabled = isGraphicsCardEnabled;
return this;
}
public ComputerBuilder setBluetoothEnabled(boolean isBluetoothEnabled) {
this.isBluetoothEnabled = isBluetoothEnabled;
return this;
}
public Computer build(){
return new Computer(this);
}
}
}
Обратите внимание, что в компьютерном классе есть только методы получения и нет общедоступного конструктора. Таким образом, единственный способ получить компьютерный объект-это использовать класс Computer Builder.
Вот пример тестовой программы шаблона построителя, показывающей, как использовать класс построителя для получения объекта.
package com.journaldev.design.test;
import com.journaldev.design.builder.Computer;
public class TestBuilderPattern {
public static void main(String[] args) {
//Using builder to get the object in a single line of code and
//without any inconsistent state or arguments management issues
Computer comp = new Computer.ComputerBuilder(
"500 GB", "2 GB").setBluetoothEnabled(true)
.setGraphicsCardEnabled(true).build();
}
}
Видеоурок по Дизайну конструктора
Недавно я загрузил видео на YouTube для шаблона дизайна Builder. Я также объяснил, почему я считаю, что шаблон конструктора, определенный в ВикиПедии с использованием классов директоров , не является очень хорошим объектно-ориентированным подходом, и как мы можем достичь того же уровня абстракции, используя другой подход и с одним классом.
Обратите внимание, что это моя точка зрения, я чувствую, что шаблоны проектирования должны направлять нас, но в конечном счете мы должны решить, действительно ли выгодно внедрять их в наш проект или нет. Я твердо верю в Принцип ПОЦЕЛУЯ .
Если вам понравилось видео, пожалуйста, поделитесь им, поставьте лайк и подпишитесь на мой канал. Если вы думаете, что я ошибаюсь, или у вас есть какие-либо комментарии или отзывы, чтобы я мог улучшить свои видео в будущем, пожалуйста, дайте мне знать через комментарии здесь или на странице видео YouTube.
Пример шаблона проектирования конструктора в JDK
Некоторые из примеров шаблонов компоновщика в классах Java являются;
- ява.ланг.StringBuilder#добавить() (несинхронизировано)
- ява.ланг.Строка буфера#добавить() (синхронизировано)
Это все для шаблона проектирования builder в java.