I understand if 2 classes have circular dependency, eg:
public class MyWindow{
public MyWindow(){
new MyDialog(this);
}
public onDialogResponse(int option){
}
}
public class MyDialog{
MyWindow myWindow;
public MyDialog(MyWindow myWindow){
this.myWindow=myWindow;
}
public void onClicked(int option){
this.myWindow.onDialogResponse(option);
}
}
we can break circular dependency by creating an interface, eg:
public interface IWindow{
void onDialogResponse(int option);
}
public class MyWindow implements IWindow{
public MyWindow(){
new MyDialog(this);
}
public onDialogResponse(int option){
}
}
public class MyDialog{
IWindow myWindow;
public MyDialog(IWindow myWindow){
this.myWindow=myWindow;
}
public void onClicked(int option){
this.myWindow.onDialogResponse(option);
}
}
but my question is, if IWindow is used once just for breaking circular dependency, is it worth to do that? because I think although circular dependency looks bad, breaking circular dependency in this case results in more complex code as an extra interface is created. Is there any practical motivation or usage to create a interface just for breaking circular dependency like this case?