Teraz zamieszczę przykład, rano postaram się go opisać.
Kod: Zaznacz cały
#include <iostream>
#include <string>
class cLogger{
public:
virtual void log(std::string data) = 0;
};
class MyLogger : public cLogger{
public:
virtual void log(std::string data){
std::cout<<"MyLogger message["<<data<<"]"<<std::endl;
}
};
class cWork {
public:
cWork(cLogger* l):_log(l){}
void loguj(std::string d){
_log->log(d);
}
private:
cLogger* _log;
};
int main(){
MyLogger l;
cWork work(&l);
work.loguj("Hello World!");
return 0;
}
A więc czym jest Dependency Injection? Jest to wzorzec projektowy który likwiduje zależności między klasami. W tradycyjnym programowaniu klasy łączy się po przez dziedziczenie, są one połączone już na etapie ich projektowania, jakakolwiek podmiana klasy wymaga edytowania ich kodu.
Natomiast wykorzystując DI klasy łączy się dopiero w głównym programie, podczas tworzenia ich instancji. W powyższym przykładzie wskaźnik do instancji klasy MyLogger przekazujemy do konstruktora klasy cWork,jest on zapisywany pod wskaźnikiem _log w tym momencie powstaje połączenie obiektów. cWork zapisuje u siebie wskaźnik do MyLogger pod cLogger* _log. W monecie wywołania funkcji loguj z cWork, wywoływana jest funkcja log z MyLogger.
Kod: Zaznacz cały
void loguj(std::string d){
_log->log(d);
}