Инкапсуляция в Java на примере связанного списка
Рассмотрим инкапсуляцию в Java реализуя простой связанный список.
Связанный список
Разбор структуры связанного списка и его сравнение с масивом есть в общем разделе Структуры данных.
#
Добавление элементовВ первом видео мы создаем класс LinkedList
в виде структуры с публичными полями. Этот подход раскрывает детали реализации списка. Таким образом пользователь класса (тоже разработчик, а точнее его код) может случайно "поломать его внутренности". К примеру, обнулить ссылку на голову списка, но оставить прежним значение количества элементов.
Для устранения этой проблемы мы делаем поля списка приватными а функции работы с ним заменяем методами. Таким образом применяем принцип инкапсуляции - скрываем детали реализации от пользователей класса и защищаем его от некоректного доступа извне.
#
Последовательный доступ к элементамМы сокрыли доступ к голове списка, но нам надо как-то проходить по его элементам. Для этого мы реализуем метод forEach
и будем передавать в него функциональный интерфейс Consumer
(потребитель). Реализовав интерфейс потребителя мы как раз и опишем тот код, который хотим выполнять над каждым элементом (использовать, потреблять этот элемент).
Функциональные интерфейсы
Consumer -- это интерфейс из семейства функциональных интерфейсов в Java. Вот еще несколько из них:
Iterator
#
💻 ПрактикаДополнить API связанного списка реализовав следующие методы. На каждый метод реализовать хотя-бы один юнит-тест.