Какой шаблон наиболее часто используется в java.io? - PullRequest
29 голосов
/ 18 июня 2010

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

Ответы [ 5 ]

30 голосов
/ 18 июня 2010

BufferedReader и т. Д. Реализует шаблон декоратора . Любой Reader, например, FileReader или StringReader, может быть оформлено с функцией буферизации, которая действительно не обращает внимания на источник.


Другие модели


Анти-паттерны

Чтобы добавить к тому, что сказали другие, в библиотеках Java есть несколько anti -шаблонов:

Антипаттерн: наследство вместо композиции

С Effective Java 2nd Edition, Item 16: Композиция Favour по наследованию :

В библиотеках платформы Java есть ряд очевидных нарушений этого принципа. Например, стек не является вектором, поэтому Stack не должен расширяться Vector. Аналогично, список свойств не является хеш-таблицей, поэтому Properties не должен расширяться Hashtable. В обоих случаях состав был бы предпочтительнее.

Похожие вопросы


Антипаттерн: постоянные интерфейсы

Начиная с Effective Java 2nd Edition, Item 19: Используйте интерфейсы только для определения типов :

В библиотеках платформы Java есть несколько постоянных интерфейсов, таких как java.io.ObjectStreamConstants. Эти интерфейсы должны рассматриваться как аномалии и не должны эмулироваться.

Смежные вопросы


Antipattern: телескопический конструктор и шаблоны JavaBeans

Начиная с Effective Java 2nd Edition, Item 2: Рассмотрите конструктор, когда сталкиваетесь со многими параметрами конструктора ( выдержка онлайн ):

Традиционно программисты использовали шаблон телескопического конструктора , в котором вы предоставляете конструктору только необходимые параметры, другой - с одним необязательным параметром, третий - с двумя дополнительными параметрами и т. Д. [. ..] Шаблон телескопического конструктора работает, но при большом количестве параметров написать клиентский код сложно, а написать его еще сложнее.

Второй альтернативой, когда вы сталкиваетесь со многими параметрами конструктора, является шаблон JavaBeans , в котором вы вызываете конструктор без параметров для создания объекта, а затем вызываете методы установки для установки каждого обязательного параметра, и каждый необязательный параметр интереса. [...] К сожалению, шаблон JavaBeans имеет серьезные недостатки [...], поскольку собственный JavaBean может находиться в несовместимом состоянии в процессе его построения [и это] исключает возможность сделать класс неизменным.

Bloch рекомендует использовать вместо этого шаблон .

Похожие вопросы

23 голосов
/ 18 июня 2010

Я думаю, они хотели услышать о шаблоне декоратора , который можно найти в различных потоках, читателях и пишущих.

Другие модели (маленький выбор):

Я почти уверен, что можно найти примеры почти для всех шаблонов, перечисленных на этой странице википедии в Java SDK.

8 голосов
/ 18 июня 2010

Шаблон декоратора часто используется в Java-вводе / выводе.

Пример

BufferedReader br = new BufferedReader(new FileReader("filename.txt")); 
4 голосов
/ 18 июня 2010

Шаблон декоратора, я думаю.Для создания всех разновидностей ридеров, писателей, потоков ввода и вывода.См., Например, this .

1 голос
/ 03 июня 2016

Шаблоны, используемые в пакете java.io.

  1. Decorator_pattern .

    Примеры:

    Абстрактный класс java.io.FilterInputStream и его конкретные подклассы: BufferedInputStream, CheckedInputStream и т. Д.

  2. 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
    
  3. Adapter_pattern :

    Примеры:

    java.io.InputStreamReader преобразует поток байтов в поток символов, а java.io.OutputStreamWriter преобразует поток символов впоток байтов.

    Более подробную информацию вы можете найти в этой статье

  4. Template_method_pattern (источник: journaldev article)

    Все неабстрактные методы java.io.InputStream, java.io.OutputStream, java.io.Reader and java.io.Writer.

Для всех других шаблоновв Java см. этот пост:

Примеры шаблонов проектирования GoF в основных библиотеках Java

...