Из вашего описания кажется, что:
- текущий исходный код не соответствует вашим требованиям
- вы не можете изменить или легко расширить исходный код
Если это неопровержимые факты, вы столкнулись с трудной ситуацией.Одним из способов продвижения вперед является создание отдельной архитектуры, которая обертывает существующую функциональность, когда имеет смысл ее использовать, или пишет новый код для случаев, когда его трудно использовать повторно.Таким образом, вы рассматриваете существующий код как внешнюю библиотеку , которую вы используете, когда это имеет смысл.Некоторые шаблоны, которые приходят на ум, это мост и адаптер .Наследование обычно не является хорошим способом продвижения вперед, потому что оно слишком тесно связывает расширения (подклассы) с суперклассами.
Итак, учитывая ваш пример:
Рассмотрим файл с именем MenuManager.javaУ меня есть метод, который добавляет 10 Меню в MenuBar. Теперь согласно моему требованию мне нужно удалить 5 меню из существующего и добавить вновь определенные (мной) 3 Меню в тот же самый MenuBar.
Вы можете сделать это следующим образом (это просто идея, не связанная ни с какими библиотеками, такими как Swing):
// MyMenuManager.java <-- your new class
// method that adds menu items
public void addItems(Menu menu) {
new MenuManager().addItems(menu); // calls the old functionality
// adapt the menu
removeObsoleteItems(menu);
addNewItems(menu);
}
Это будет ваша первая версия, в идеале вы должны развивать ее, чтобы она не зависела от старойкод больше, при условии ваша конечная цель - заменить старое приложение (которое, учитывая ваши ограничения, кажется разумным).
Можно использовать и другие более сложные шаблоны, такие как антикоррупционный слой .