Подтвердить что ты не робот

Каков наиболее используемый шаблон в java.io?

Меня недавно задали этот вопрос во время моего собеседования, и я не мог ответить на него. Итак, каков наиболее используемый шаблон в java.io и как он используется? Каковы другие шаблоны, используемые в общих библиотеках java?

4b9b3361

Ответ 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