Есть тысячи шаблонов, и вы должны знать некоторые из них. Есть большие курсы и книги по выкройкам. В этой статье мы поговорим о шаблоне свободного интерфейса. Он настолько прост и делает код намного чище, поэтому я не удержался и не показал вам.
Очень часто у нас есть код, который создает такие объекты:
public Person generatePerson() {
Person person = new Person();
person.setFirstName("FirstName");
person.setLastName("LastName");
person.setAge(15);
person.setSex("M");
person.setCity("City");
person.setHairColor("Black");
return person;
}
Классическое картографирование. Мы инициализируем объект, затем помещаем некоторые данные в сеттеры и затем возвращаем объект. Вот как выглядит Person
object:
class Person { private String firstName; private String lastName; private int age; private String sex; private String city; private String hairColor;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; } // The rest of the getters/setters are // using the same pattern // ... }
У нас есть для них поля, геттеры и сеттеры. Классический.
Теперь, чтобы реализовать шаблон, мы вносим два простых изменения во все методы установки. Из этого:
public void setHairColor(String hairColor) {
this.hairColor = hairColor;
}
К этому:
public Person setHairColor(String hairColor) {
this.hairColor = hairColor;
return this;
}
Изменение простое: после каждого набора мы возвращаем текущий объект или так называемое «this».
Сделаем это для всех сеттеров:
class Person { private String firstName; private String lastName; private int age; private String sex; private String city; private String hairColor;
public String getFirstName() { return firstName; } public ServiceMappingDTO setFirstName(String firstName) { this.firstName = firstName; return this; } public String getLastName() { return lastName; } public ServiceMappingDTO setLastName(String lastName) { this.lastName = lastName; return this; } // The rest of the getters/setters are // using the same pattern // ... }
Вы спросите, что это за изменение? И я вам сразу показываю.
public Person generatePerson() {
return new Person()
.setFirstName("FirstName")
.setLastName("LastName")
.setAge(15)
.setSex("M")
.setCity("City")
.setHairColor("Black");
}
Посмотрите, сколько подробного кода мы удалили. Это поток: сначала мы создаем новый объект Person, который возвращает новый объект. Затем мы говорим - этот новый объект .setFirstName. Затем метод setFirstName устанавливает имя, а затем возвращает тот же объект (this). Затем мы можем сделать для него .setLastName и так далее. Мы можем объединить эти методы в цепочку.
Подсказка: если вы пишете геттеры и сеттеры вручную - прекратите это делать! Все современные IDE имеют простой способ их создания. IntelliJ даже имеет возможность генерировать установщики Fluent interface.
Прежде чем вы уйдете - наш удивительный курс чистого кода
Если вам понравилась эта статья, вам понравится наш курс:
- 46 лекций
- 3 часа контента
- Работа над реальным проектом, который проверит ваши знания
- 27 загружаемых ресурсов
- 30-дневная гарантия возврата денег
Вы можете записаться на курс здесь - Чистый код: взлетайте до небес за 7 дней