Strona 1 z 1

Dependency Injection

: piątek 09 paź 2015, 09:24
autor: PROTON
Po rozmowie z kolegą raf stwierdziłem, że nie ma w internecie dobrego przykładu Dependency Injection dla C++.
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);
    }