В моем приложении есть служебный класс со статическими методами, которые отвечают за отображение уведомлений и, при необходимости, отправку электронных писем, когда происходит что-то плохое:
public static void sendEvent(final String description, final String name) {
....
SmtpParms smtpParams = readSmtpParms();
....
}
private static SmtpParms readSmtpParms() {
// read from properties file
....
}
Наша кодовая база совместно используется двумя приложениями.Приложение A считывает параметры SMTP из файла свойств.Я работаю в основном над Приложением B. Приложение B не использовало эту функцию электронной почты, но все еще совершало звонки, чтобы показывать уведомления о событиях в нашем графическом интерфейсе.Теперь приложение B должно прочитать параметры SMTP из базы данных.
Я хочу повторно использовать существующий код, но поскольку методы являются статическими, я не могу просто создать подкласс этого служебного класса и указать весь код приложения B на этом подклассе.Эта утилита упоминается в нескольких JAR-файлах, и я предпочел бы решение, которое изменяет код как можно меньше.
Я думаю, что если я смогу выделить readSmtpParms
в отдельный класс, это может помочь.Но я не могу придумать, как передать источник (файл свойств в сравнении с базой данных) экземпляру служебного класса без изменения сигнатуры метода sendEvent
.Я полагаю, что альтернативой может быть создание другого метода sendEventUsingDatabase
, но тогда мне все равно придется обновить все ссылки на sendEvent
в коде приложения B.
Есть ли решение, которое не изменяет исходныйкод, но также не дублирует код?Этот код соответствует шаблону проектирования или анти-шаблону?Спасибо.