Каков наиболее используемый шаблон в java.io?
Меня недавно задали этот вопрос во время моего собеседования, и я не мог ответить на него. Итак, каков наиболее используемый шаблон в java.io и как он используется? Каковы другие шаблоны, используемые в общих библиотеках java?
Ответы
Ответ 1
Я думаю, они хотели услышать о Decorator pattern, который можно найти в различных потоках, читателях и писателях.
Другие шаблоны (небольшой выбор):
Я уверен, что можно найти примеры почти всех шаблонов, перечисленных на этой странице
Ответ 2
BufferedReader
etc реализует шаблон декоратора, Любые Reader
, например. FileReader
или StringReader
, может быть украшенный функцией буферизации, которая действительно не интересует источник.
Другие шаблоны
Анти-паттерны
Чтобы добавить к словам других, это несколько анти-шаблонов в библиотеках Java:
Антипаттерн: наследование вместо композиции
Из эффективного Java 2nd Edition, пункт 16: предпочтение композиции над наследованием:
В библиотеках платформы Java существует ряд очевидных нарушений этого принципа. Например, стек не является вектором, поэтому Stack
не должен расширять Vector
. Аналогично, список свойств не является хеш-таблицей, поэтому Properties
не должен расширять Hashtable
. В обоих случаях композиция была бы предпочтительной.
Связанные вопросы
Антипаттерн: постоянные интерфейсы
Из Effective Java 2nd Edition, пункт 19: Используйте интерфейсы только для определения типов:
В библиотеках платформы Java существует несколько постоянных интерфейсов, таких как java.io.ObjectStreamConstants
. Эти интерфейсы следует рассматривать как аномалии и не следует эмулировать.
Связанные вопросы
Антипаттерн: конструктор телескопов и шаблоны JavaBeans
Из эффективного Java 2nd Edition, пункт 2: рассмотрите построитель, столкнувшись со многими параметрами конструктора (выдержка в Интернете):
Традиционно программисты использовали шаблон конструктора телескопа, в котором вы предоставляете конструктор только с требуемыми параметрами, другой с одним необязательным параметром, третий с двумя необязательными параметрами и т.д. [...] Конструктор телескопирования шаблон работает, но писать код клиента сложно, когда есть много параметров, и еще сложнее записать его.
Вторая альтернатива, когда вы сталкиваетесь со многими параметрами конструктора, - это шаблон JavaBeans, в котором вы вызываете конструктор без параметров для создания объекта, а затем вызываете методы setter для установки каждого требуемого параметра и каждого необязательного параметра, представляющего интерес. [...] К сожалению, шаблон JavaBeans имеет серьезные недостатки в своем собственном [...] JavaBean может находиться в противоречивом состоянии частично через его конструкцию [и он] исключает возможность сделать класс неизменным.
Блох рекомендует вместо этого использовать шаблон компоновщика.
Связанные вопросы
Ответ 3
шаблон декоратора часто используется в java i/o.
Пример
BufferedReader br = new BufferedReader(new FileReader("filename.txt"));
Ответ 4
Рисунок декоратора, я думаю. Чтобы создать все вкусы читателей, писателей, потоков ввода и вывода.
Например, этот.
Ответ 5
Шаблоны, используемые в пакете java.io.
-
Decorator_pattern.
Примеры:
Абстрактный класс java.io.FilterInputStream и его конкретные подклассы: BufferedInputStream, CheckedInputStream
и т.д.
-
Abstract_factory_pattern и Factory_method_pattern шаблоны:
Примеры:
Абстрактный класс InputStream и его конкретные подклассы: ByteArrayInputStream, FileInputStream, FilterInputStream
и т.д.
InputStream input = new FileInputStream("some_file.txt");
Ниже классы позволяют унифицировать ввод из байтового массива, файла, сетевого подключения, постоянного хранилища, трубы, строки и т.д.:
class java.io.InputStream
class java.io.ByteArrayInputStream
class java.io.FileInputStream
class java.io.FilterInputStream
class java.io.ObjectInputStream
class java.io.PipedInputStream
class java.io.SequenceInputStream
class java.io.StringBufferInputStream
-
Adapter_pattern:
Примеры:
java.io.InputStreamReader
преобразует поток байтов в поток символов, а java.io.OutputStreamWriter
преобразует поток символов в поток байтов.
Вы можете найти более подробную информацию в этой статье
-
Template_method_pattern (источник: journaldev)
Все не абстрактные методы java.io.InputStream, java.io.OutputStream, java.io.Reader and java.io.Writer
.
Для всех других шаблонов в java обратитесь к этому сообщению:
Примеры шаблонов проектирования GoF в основных библиотеках Java