Коллекция в Java – это группа индивидуальных элементов, часто с определенными правилами, применяемыми к элементам. Список должен хранить элементы в определенной последовательности. Набор не может иметь дублирующиеся элементы. Карта – группа объектных пар ключ-значение. Карта может возвращать набор своих ключевых значений, коллекцию своих значений или набор своих пар.
Приступая к разработке приложения, далеко не всегда можно заранее решить, какие именно компоненты вам понадобятся. Обычно у разработчика есть лишь общее видение того, что должны делать компоненты, но реализация функциональности компонентов с уточнением их возможностей выполняется позже, в ходе работы над проектом.
Частично данную проблему решает использование интерфейсов, описывающих подобные компоненты. Применение интерфейсов затрудняет работу программиста, так как из интерфейса невозможно создать объект. Для того чтобы получить объект, нужно реализовать класс. Поэтому, вместо того, чтобы разрабатывать реализацию некоего класса, специфичного для конкретного приложения, можно просто вычленить из класса функциональность конструктора и реализовать ее в виде специального метода, "фабрикующего" объекты приложения.