Рубрики
Без рубрики

Шаблон проектирования конструктора на Java

Шаблон проектирования конструктора на java. Зачем нам нужен шаблон конструктора? Шаблон конструктора в примере кода java. Шаблон творческого проектирования на java.

Автор оригинала: Pankaj Kumar.

Сегодня мы рассмотрим шаблон конструктора на java. Шаблон дизайна конструктора-это шаблон творческого дизайна как Фабричный шаблон и Абстрактный фабричный шаблон .

Шаблон Проектирования Строителя

Шаблон конструктора был введен для решения некоторых проблем с фабричными и абстрактными шаблонами проектирования фабрик, когда объект содержит много атрибутов.

Существуют три основные проблемы с фабричными и абстрактными шаблонами проектирования фабрик, когда объект содержит много атрибутов.

  1. Слишком много аргументов для передачи из клиентской программы в заводской класс, что может привести к ошибкам, потому что в большинстве случаев тип аргументов один и тот же, и со стороны клиента трудно поддерживать порядок аргументов.
  2. Некоторые параметры могут быть необязательными, но в заводском шаблоне мы вынуждены отправлять все параметры, а необязательные параметры необходимо отправлять как НУЛЕВЫЕ.
  3. Если объект тяжелый и его создание сложное, то вся эта сложность будет частью заводских классов, что сбивает с толку.

Мы можем решить проблемы с большим количеством параметров, предоставив конструктор с необходимыми параметрами, а затем различные методы настройки для установки дополнительных параметров. Проблема с этим подходом заключается в том, что состояние объекта будет несогласованным до тех пор, пока все атрибуты не будут заданы явно.

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

Шаблон проектирования конструктора на Java

Давайте посмотрим, как мы можем реализовать шаблон проектирования builder в java.

  1. Прежде всего, вам нужно создать статический вложенный класс , а затем скопировать все аргументы из внешнего класса в класс Builder. Мы должны следовать соглашению об именовании, и если имя класса Computer , то класс builder должен быть назван как ComputerBuilder .
  2. Класс Java Builder должен иметь общедоступный конструктор со всеми необходимыми атрибутами в качестве параметров.
  3. Класс Java Builder должен иметь методы для установки необязательных параметров, и он должен возвращать тот же объект Builder после установки необязательного атрибута.
  4. Последним шагом является предоставление метода 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.