Dependency Injection

W tym miejscu zadajemy pytania na temat języka C++, dzielimy się swoją wiedzą, udzielamy wsparcia, rozwiązujemy problemy programistyczne.
Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Dependency Injection

Postautor: PROTON » piątek 09 paź 2015, 09:24

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);
    }
Gott weiß ich will kein Engel sein.

Wróć do „Pisanie programów w C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości