Альтернативные классы с разными интерфейсами.
Два класса выполняют одинаковые функции, но имеют разные названия методов.
##Признаки и симптомы
Два класса выполняют одинаковые функции, но имеют разные названия методов.

class SmtpMailer {
private final SmtpTransport transport = new SmtpTransport();
void send(Message msg) { transport.write(msg); }
}
class EmailSender {
private final SmtpTransport transport = new SmtpTransport();
void deliver(Message msg) { transport.write(msg); }
}##Причины проблемы
Программист, который создал один из классов, скорей всего, не знал о том, что в программе уже существует аналогичный по функциям класс.
##Лечение
##Результат
-
Вы избавляетесь от ненужного дублирования кода, и, таким образом, уменьшаете его размер.
-
Повышается читабельность кода, улучшается его понимание. Вам больше не придется гадать, зачем создавался второй класс, выполняющий точно такие же функции, как и первый.
