У меня есть кодовая база, которая изначально была создана с рядом различных опций, которые позволяют вам заставить код выполнять один и тот же процесс немного по-другому, например так:
public class MainFunction {
public void main(String option){
if (option.equals("vanilla mode")){
this.firstFunction();
}else{
this.differentVersionOfFirstFunction();
}
this.secondFunction();
}
public void firstFunction(){
//First functions code
}
public void secondFunction(){
//Second functions code
}
public void differentVersionOfFirstFunction(){
// different code from First functions code that produces the same type of end result using a slightly different method
}
}
Это постепенно становилось все более и более сложным, поскольку добавлялись различные опции, а код становился все более запутанным.
Чтобы решить эту проблему, я изначально планировал создать объект Parent, который затем мог бы иметь дочерние элементы с тонкими вариациями методов Parents, когда это необходимо. Проблема в том, что я понимаю, что это нарушит принцип замещения Лискова, и действительно, у меня могут быть дети, которые должны использовать тот же метод, которого может не быть у их родителя.
Итак, у меня остались разные методы в одном и том же объекте класса, выполняющие одну и ту же работу немного по-разному.
public class MainFunction {
public void main1(){
this.firstFunction();
this.secondFunction();
}
public void main2(){
this.differentVersionOfFirstFunction();
this.secondFunction();
}
public void firstFunction(){
//First functions code
}
public void secondFunction(){
//Second functions code
}
public void differentVersionOfFirstFunction(){
// different code from First functions code that produces the same type of end result using a slightly different method
}
}
Я полагаю, что мог бы создать отдельный класс Utility для хранения всех моих различных функций, но я не был уверен, есть ли более элегантное решение?