Пусть ваши методы возвращают 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();
Шаблон построителя позволяет вам установить все параметры для нового экземпляра класса до того, как объект будет построен (рассмотрите классы, которые имеют final
полей или объектов, для которых установка значения после его создания обходится дороже, чем установка его при его построении) .
В приведенном выше примере: setMessage(String)
, setTitle(String)
принадлежат классу DialogBuilder
и возвращают тот же экземпляр DialogBuilder
, к которому они вызываются; метод build()
принадлежит классу DialogBuilder
, но возвращает объект Dialog
метод show()
принадлежит классу Dialog
.
Дополнительно
Возможно, это не связано с вашим вопросом, но может помочь вам и другим людям, столкнувшимся с этим вопросом.
Это хорошо подходит для большинства случаев использования: всех случаев использования, не связанных с наследованием, и некоторых конкретных случаев, связанных с наследованием, когда производный класс не добавляет новых методов, которые вы хотите связать вместе, и вы не заинтересован в использовании (без приведения) результата цепочки методов в качестве объекта производного.
Если вы хотите иметь цепочку методов для объектов производных классов, у которых нет метода в их базовом классе, или вы хотите, чтобы цепочка методов возвращала объект как ссылку на производный класс, вы можете посмотреть ответы для этот вопрос.
person
lucian.pantelimon
schedule
17.01.2014
fluency
илиfluent
программированием. - person Pureferret   schedule 17.01.2014