Інтерфейс в Java - це явно зазначена специфікація набору методів, які повинні бути представлені в класі, що реалізує цю специфікацію. Реалізація цих методів в інтерфейсі відсутній. Інтерфейси можна багаторазово наслідувати. Конкретний клас може бути спадкоємцем лише одного суперкласу, але в ньому може бути реалізовано необмежену кількість інтерфейсів.
Колекція - група індивідуальних елементів, часто з певними правилами, які застосовуються до елементів. Список повинен зберігати елементи в певній послідовності. Набір не може мати дубляж елементи. Карта - група об'єктних пар ключ-значення. Карта може повертати набір своїх ключових значень, колекцію своїх значень або набір своїх пар.
Приступаючи до розробки програми, далеко не завжди можна заздалегідь вирішити, які саме компоненти вам знадобляться. Зазвичай у розробника є лише загальне бачення того, що повинні робити компоненти, але реалізація функціональності компонентів з уточненням їх можливостей виконується пізніше, в ході роботи над проектом.
Частково цю проблему вирішує використання інтерфейсів, що описують подібні компоненти. Застосування інтерфейсів ускладнює роботу програміста, так як з інтерфейсу не вдається створити об'єкт. Для того щоб отримати об'єкт, потрібно реалізувати клас. Тому, замість того, щоб розробляти реалізацію такого класу, специфічного для конкретного додатка, можна просто вичленувати з класу функціональність конструктора і реалізувати її у вигляді спеціального методу "фабрикующего" об'єкти програми.