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

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

Неизменяемый класс Java, Неизменяемый класс в Java, конструктор неизменяемых классов Java, шаблон проектирования неизменяемого класса java, пример кода программы неизменяемого класса.

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

В моем последнем посте я объяснил о шаблоне Builder в Java . Некоторое время назад я написал статью о как создать неизменяемый класс в java . В этом посте мы узнаем, как легко создать неизменяемый класс java с помощью шаблона конструктора. Использование шаблона построителя для создания неизменяемого класса является хорошим подходом, когда количество аргументов в конструкторе больше, что может привести к путанице в их упорядочении.

Важные моменты неизменяемого класса Java

  • Неизменяемый класс должен иметь только методы получения.
  • Неизменяемый класс будет иметь частный конструктор с объектом Builder в качестве параметра, который будет использоваться для создания неизменяемого класса.
  • Если неизменяемые атрибуты класса не являются неизменяемыми, например HashMap, мы должны выполнить глубокое копирование или клонирование, чтобы избежать изменения его атрибутов.
  • Использование шаблона компоновщика легко, когда количество необязательных атрибутов больше в неизменяемом классе.

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

Вот реализация неизменяемого класса в java с использованием шаблона Builder.

package com.journaldev.design.builder;

import java.util.HashMap;

public class ImmutableClass {
	
	//required fields
	private int id;
	private String name;
	
	//optional fields
	private HashMap properties;
	private String company;
	
	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public HashMap getProperties() {
		//return cloned object to avoid changing it by the client application
		return (HashMap) properties.clone();
	}

	public String getCompany() {
		return company;
	}

	private ImmutableClass(ImmutableClassBuilder builder) {
		this.id = builder.id;
		this.name = builder.name;
		this.properties = builder.properties;
		this.company = builder.company;
	}
	
        //Builder class
	public static class ImmutableClassBuilder{
		//required fields
		private int id;
		private String name;
		
		//optional fields
		private HashMap properties;
		private String company;
		
		public ImmutableClassBuilder(int i, String nm){
			this.id=i;
			this.name=nm;
		}
		
		public ImmutableClassBuilder setProperties(HashMap hm){
			this.properties = (HashMap) hm.clone();
			return this;
		}
		
		public ImmutableClassBuilder setCompany(String comp){
			this.company = comp;
			return this;
		}
		
		public ImmutableClass build(){
			return new ImmutableClass(this);
		}
	}
}

Вот тестовая программа, чтобы проверить, является ли создаваемый нами объект неизменяемым или нет.

package com.journaldev.design.test;

import java.util.HashMap;

import com.journaldev.design.builder.ImmutableClass;

public class ImmutableBuilderTest {

	public static void main(String[] args) {
		
		// Getting immutable class only with required parameters
		ImmutableClass immutableClass = new ImmutableClass.ImmutableClassBuilder(1, "Pankaj").build();
		
		HashMap hm = new HashMap();
		hm.put("Name", "Pankaj");
		hm.put("City", "San Jose");
		// Getting immutable class with optional parameters
		ImmutableClass immutableClass1 = new ImmutableClass.ImmutableClassBuilder(1, "Pankaj")
                                                     .setCompany("Apple").setProperties(hm).build();
		
		//Testing immutability
		HashMap hm1 = immutableClass1.getProperties();
		
		//lets modify the Object passed as argument or get from the Object
		hm1.put("test", "test");
		hm.put("test", "test");
		
		//check that immutable class properties are not changed
		System.out.println(immutableClass1.getProperties());
	}

}

Это все для создания неизменяемого класса в java с использованием шаблона конструктора.

Ссылка: Документация Oracle