Пусть ваши методы возвращают this
как :
public Dialog setMessage(String message)
{
//logic to set message
return this;
}
Таким образом, после каждого вызова одного из методов, вы получите тот же объект возвращается, так что вы можете вызвать другой метод на.
Этот метод полезен, если вы хотите вызвать серию методов для объекта: он уменьшает количество кода, необходимого для его достижения, и позволяет вам иметь одно возвращаемое значение после цепочки методов.
Пример уменьшения количества кода, необходимого, чтобы показать диалоговое окно будет:
// Your Dialog has a method show()
// You could show a dialog like this:
new Dialog().setMessage("some message").setTitle("some title")).show();
Пример использования единственного возвращаемое значение будет:
// In another class, you have a method showDialog(Dialog)
// Thus you can do:
showDialog(new Dialog().setMessage("some message").setTitle("some title"));
Пример с использованием Builder, который Деннис упомянул в комментарии к вашему вопросу:
new DialogBuilder().setMessage("some message").setTitle("some title").build().show();
Строитель pat tern позволяет вам установить все параметры для нового экземпляра класса до того, как объект будет построен (рассмотрите классы с полями или объектами final
, для которых установка значения после того, как оно было построено, является более дорогостоящим, чем установка его при его создании).
В приведенном выше примере: setMessage(String)
, setTitle(String)
принадлежат к классу DialogBuilder
и возвращать тот же экземпляр DialogBuilder
, что они призвали; метод build()
относится к классу DialogBuilder
, но возвращает объект Dialog
. Метод show()
относится к классу Dialog
.
Extra
Это не может быть связано с вашим вопросом, но это может помочь вам и другим, которые приходят по этому вопросу.
Это хорошо работает для большинства случаев применения: все случаи использования, которые не влечет за наследование и некоторые частные случаи, связанные с наследованием, когда производный класс не добавляет новые методы, которые вы хотите цепи вместе и вы не заинтересован в использовании (без литья) результата цепочки методов как объекта производного.
Если вы хотите иметь цепочку методов для объектов производных классов, которые не имеют метода в своем базовом классе, или вы хотите, чтобы цепочка методов возвращала объект в качестве ссылки производного класса, вы можете иметь посмотрите ответы на this question.
Как шаблон Builder? –
Обычно это называется программированием «бегло» или «свободно». – Pureferret
Вы должны создать Builder для Dialog вместо использования seters для свободного Api. Если вы сделаете так много доступа к bean-файлу, больше не будете работать, поскольку рамки ограничивают seters возвратом void. Посмотрите на проект ломбок, если вы не любите писать всю эту плиту котла. –