Автор оригинала: 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.