Нашел хорошую систематизированную подборку по паттернам. От других существующих отличается тем, что там собрана не только классика от "банды четырёх", но и архитектурные и интеграционные паттерны. Конечно, вдумчивого чтения первоисточников это не заменит, но поможет время от времени освежать в памяти этот немаловажный раздел знаний любого разработчика, считающего себя профессионалом. Рекомендую.
Показаны сообщения с ярлыком pattern. Показать все сообщения
Показаны сообщения с ярлыком pattern. Показать все сообщения
четверг, 6 мая 2010 г.
четверг, 9 октября 2008 г.
Возврат нескольких значений из метода
Иногда требуется написать метод, в результате выполнения которого возвращается больше, чем одно значение. Как правило для этого пишется аггрегирующий класс(если значения связаны логически), иногда возвращается коллекция со значениями. Если таких методов немного, то с таким подходом еще можно мириться, но в случае, если подобных методов появляется большое количество, код становится труден для понимания и дальнейшей поддержки. В таком случае лучше использовать подход, описанный Брюсом Эккелем в его 4м издании философии Java. Заключается он в использовании generic'ов.
Для каждого кортежа значений создается специальный типизированный класс:
public class TwoTuple {
public final A first;
public final B second;
public TwoTuple(A first, B second) {
this.first = first;
this.second = second;
}
}
В данном случае он предназначен для передачи 2х любых значений. Поля класса являются неизменяемыми, что обеспечивает его потокобезопасность при использовании и делают ненужными наличие геттеров и сеттеров. По аналогии можно написать класс и для любого другого необходимого количества полей. Используется он примерно так:
...
TwoTuple rslt = new TwoTuple(1L, "example");
return rslt;
Такой подход действительно упрощает жизнь, так как не привязан к конкретным типам данным и поэтому гибок, а также избавляет от необходимости писать различные варианты классов-аггрегаторов и увеличивает читаемость кода(по сравнению с использованием коллекций в подобном случае).
Подписаться на:
Сообщения (Atom)
