Wzorce projektowe
łańcuch zobowiązań
[wzorzec projektowy] Przekazuje odpowiedzialność za wykonanie zadania do kolejnego obiektu jeżeli obecny obiekt nie wie jak obsłużyć przychodzące zadanie.Budowa wzorca projektowego
class IZadanie
{
public:
virtual int dajRodzajZadania() const = 0;
};
class IObiektObslugujacy
{
public:
virtual bool obslugaZadania( IZadanie * pZadanie ) = 0;
};
class CLancuchZobowiazan
{
protected:
std::list < IObiektObslugujacy *> m_vObsluga;
public:
bool obsluzZadanie( IZadanie * pZadanie )
{
for( std::list < IObiektObslugujacy *>::iterator i = m_vObsluga.begin(); i != m_vObsluga.end(); i++ )
{
if(( * i )->obslugaZadania( pZadanie ) )
return true;
}
return false;
}
};
Opis szczegółowy
Łańcuch zobowiązań
(ang. chain of responsibility) - wzorzec projektowy, który automatycznie przekazuje odpowiedzialność za wykonanie zadania do następnika, jeżeli obecny obiekt nie potrafi obsłużyć otrzymanego zadania. W przypadku gdy następnik nie istnieje - zadanie zostaje odrzucone. Łańcuch zobowiązań można wyobrazić sobie jako listę obiektów obsługujących, którą przechodzimy dopóki nie znajdziemy obiektu, który będzie w stanie obsłużyć żądane zadanie. Poniżej zamieszczam jedną z możliwych form implementacji:
std::list < IObiektObslugujacy *> lista_obiektow_obslugujacych;
IZadanie * pZadanie = NULL;
for( std::list < IObiektObslugujacy *>::iterator i = lista_obiektow_obslugujacych.begin(); i != lista_obiektow_obslugujacych.end(); i++ )
{
if(( * i )->obslugaZadania( pZadanie ) )
break;
}
Pozostałe informacje
Możliwości implementacji łańcucha zobowiązań jest wiele - zasada działania pozostaje jednak ta sama.
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.