Piszę samodzielną aplikację do przetwarzania dźwięku. Mam obiekt AudioManager
, który owija rzeczy związane z silnikiem (takie jak zarządzanie urządzeniami I/O, routing przetwarzania sygnałów, stan pracy). Piszę GUI do kontroli AudioManager
działa w tle. Obecnie każdy komponent, który musi wysłać wiadomość AudioManager
, potrzebuje do tego wskaźnika.Jak uniknąć używania danych globalnych dla danych za GUI?
ta zaczyna się szalony, gdy głęboko zagnieżdżony obiekt potrzebuje wskaźnik do AudioManager
, a to oznacza, że muszę przekazać wskaźnik przez konstruktorów obiektów graficznych, które bezpośrednio nie dbają o AudioManager
(tylko niektóre składowe muszą wiedzieć).
Mogę po prostu zrobić AudioManager
singleton, aby uniknąć tablicy, ale przepływ informacji z klasy jest dwukierunkowy, więc jest to prawdopodobnie zły pomysł. Czuję się też trochę podejrzanie owijając wszystko w wielką klasę, ale sprawia, że łatwiej jest o tym mówić. Czy istnieje wspólny wzorzec, aby uniknąć przechodzenia bezmyślnego wskaźnika?
Poniżej znajduje się fragment pseudokodu pokazujący niektóre konstruktory podkreślające podstawowy typ problemu. Tagowałem to C++ 11, aby zobaczyć, czy to daje jakieś unikalne rozwiązania.
MainWindow()
{
am = new AudioManager();
someWidget = new SomeWidget(am);
}
SomeWidget(AudioManager* am_) //SomeWidget does not really care about am
{
someSubComponent = new SubThingy(am_);
}
SubThingy(AudioManager* am_) : subThingyLocalAudioManagerPtr(am_)
{
subThingyLocalAudioManagerPtr->registerSomethingOrOther(this);
}
W dzisiejszych czasach audio-manager jest tym, co dzieci nazywają odtwarzaczem audio.Ten ciekawy –
Więc trolling to co dzieci Zrobić na SO w tych dniach Interesujące – learnvst
Robot nie jest "trollingu", jest pociągający do śmieszności nazywania rzeczy "menedżerami", co jest prawie zawsze oznaką strasznego projektu.Masz nawet odpowiedź, która wyraźnie mówi, że –