Используйте шаблон адаптера вместо кода рефакторинга из перечислителя в итератор - PullRequest
1 голос
/ 12 марта 2019

Я прочитал Head First Design Patterns 2004 на стр. 248 о шаблоне адаптера в реальном мире.
В нем говорится о старом Java-приложении, использующем Enumerator , но теперь оно становится устаревшим кодом , который Java больше не поддерживает.
Разрешение осуществляется с помощью Шаблон адаптера для адаптации Перечислитель с Итератор (новая версия Java).

Почему бы им просто не выполнить рефакторинг (отредактировать) код из Перечислителя вИтератор вместо использования шаблона?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Прежде всего, я хотел бы отметить, что Перечисление еще не объявлено устаревшим. Вы можете свободно использовать Enumeration и Iterator . Используемая вами формулировка немного вводит в заблуждение (по крайней мере, мне).

В книге предлагается то, что в некоторых устаревших API возможно, что они могут предоставлять интерфейс Enumeration, но не интерфейс Iterator. Например, вы используете библиотеку в своей программе, которая содержит метод, который будет возвращать Enumeration<T>, и этот унаследованный класс не предоставляет вам метод для получения итератора вообще.

В этом случае вы, вероятно, захотите создать класс адаптера, если вы хотите, чтобы для вашей программы был доступен итератор. Можете ли вы редактировать код устаревшей библиотеки? Да, конечно, но всегда плохая идея модифицировать код внешней библиотеки, который вы используете. Вы можете проверить эту тему: Java Intellij: внести изменения во внешний код lib и немедленно вступить в силу

0 голосов
/ 12 марта 2019

Мне кажется, я нашел ответ, почему он предпочитает шаблон Adapter, а не рефакторинг с Enumerator на Iterator.
- Итератор не является потокобезопасным
- Перечислитель является потокобезопасным
Перечисление Java против итерации против ForLoop

...