Меня задали этот вопрос недавно во время моего собеседования, и я не мог ответить на это. Так, каков наиболее используемый шаблон в java.io и как он используется? Что другие шаблоны используются в общих библиотеках Java?
Думаю, они хотели услышать о шаблоне декоратора , который можно найти в различных потоках, средствах чтения и записи.
Другие шаблоны (небольшой выбор):
Я почти уверен, что можно найти примеры почти для всех шаблонов, перечисленных на этой странице википедии в Java SDK.
BufferedReader
и т. Д. Реализует шаблон декоратора . Любой Читатель
, например FileReader
или StringReader
, могут быть украшены функцией буферизации, которая действительно не учитывает источник.
В дополнение к сказанному другими, это несколько анти-шаблонов. -шаблоны в библиотеках Java:
Из Эффективное 2-е издание Java, пункт 16: Предпочтение композиции перед наследованием :
Существует ряд очевидные нарушения этого принципа в библиотеках платформы Java. Например, стек не является вектором, поэтому
Стек
не должен расширятьВектор
. Точно так же список свойств не является хеш-таблицей, поэтомуProperties
не должны расширятьHashtable
. В обоих случаях композиция была бы предпочтительнее.
Из Эффективное 2-е издание Java, элемент 19: Используйте интерфейсы только для определения types :
В библиотеках платформы Java есть несколько постоянных интерфейсов, таких как
java.io.ObjectStreamConstants
. Эти интерфейсы следует рассматривать как аномалии, и их не следует эмулировать.
Из Эффективно Java 2nd Edition, Item 2: Рассмотрите конструктор, когда сталкиваетесь со многими параметрами конструктора ( отрывок в Интернете ):
Традиционно программисты использовали шаблон телескопический конструктор в в котором вы предоставляете конструктор только с обязательными параметрами, другой - с одним необязательным параметром, третий - с двумя необязательными параметрами и т. д. [...] Шаблон телескопического конструктора работает, но трудно написать клиентский код, когда есть много параметров, и еще сложнее его написать.
Второй альтернативой, когда вы сталкиваетесь со многими параметрами конструктора, является шаблон JavaBeans , в котором вы вызываете конструктор без параметров для создания объекта, а затем вызываете методы установки для установки каждого необходимого параметра и каждого необязательный интересующий параметр. [...] К сожалению, шаблон JavaBeans сам по себе имеет серьезные недостатки, [...] JavaBean может находиться в несогласованном состоянии на этапе построения [и это] исключает возможность сделать класс неизменяемым.
Блох рекомендует вместо этого использовать шаблон построения .
Шаблон декоратора часто используется в java i/o.
Example
BufferedReader br = new BufferedReader(new FileReader("filename.txt"));
Шаблон декоратора, я думаю. Для создания всех видов Читателей, Писателей, входных и выходных потоков. Смотрите, например, this.