So I have a high level module, that uses a low level module (I intend to use this example for language agnostic explanatory purposes, so I removed access modifiers, getters & setters etc.):
Class SalariesHandler
{
// properties…
Printer printer;
SalariesHandler(Printer printer..)
{
this.printer=printer;
}
}
And then I invert the dependency between Printer
and SalariesHandler
like so:
Printer
gets its SalariesHandler
dynamically:
Class Printer
{
PrintSalary(int salaryID)
{
..
ISalariesHandler salariesHandler = SalariesHandlerFactory.GetInstance();
Salary salary = salariesHandler.GetSalary(salaryID);
Print(salary.AsPrintable());
..
}
}
And the factory is implemented as follows:
Class SalariesHandlerFactory
{
ISalariesHandler GetInstance(){
String currentSalariesHandlerType=getCurrentSalariesHandlerType(Settings settings);
Switch (currentSalariesHandlerType) {
Case “version1”: return new SalariesHandlerVersion1(); break;
Case “version2”: return new SalariesHandlerVersion2(); break;
..
}
}
}
So finally, is this a good example of DIP?