ogólnie należy zaktualizować wszystko od obserwowalne, gdy pojawi się wywołanie aktualizacji(). jeśli to nie jest praktyczne, możesz przekazać podpowiedź do notifyObservers().
gang-of-książki mówi, że jedną z konsekwencji wzoru obserwatora.
„Niespodziewane aktualizacje Ponieważ obserwatorzy nie mają wiedzy o obecności siebie nawzajem, mogą być ślepy na ostateczny koszt zmiany podmiot Z pozoru niewinna operacja na obiekcie może powodować kaskadę aktualizacji obserwatorów i ich obiektów zależnych, ponadto kryteria zależności, które nie są dobrze zdefiniowane lub utrzymywane, zwykle prowadzą do fałszywych aktualizacji, które mogą być trudne do wyśledzenia.
Ten problem jest pogarszany przez fakt, że prosty protokół aktualizacji nie zawiera żadnych szczegółów na temat tego, co zmieniło się w temacie. o pomóż obserwatorom odkryć, co się zmieniło, mogą być zmuszeni do ciężkiej pracy, aby wydedukować zmiany. " również w trakcie realizacji, mówią:
" Unikanie protokołów aktualizacji specyficznych dla obserwatora: modele push i pull. Implementacje wzorca obserwatora często powodują, że podmiot transmituje dodatkowe informacje o zmianie. Temat przekazuje tę informację jako argument do Aktualizacji. Ilość informacji może się znacznie różnić.
Na jednym krańcu, który nazywamy modelem push, podmiot wysyła obserwatorom szczegółowe informacje o zmianie, czy tego chcą, czy nie. Na drugim biegunie jest model ciągnięcia; przedmiot wysyła tylko minimalną notyfikację, a obserwatorzy pytają o szczegóły dopiero później.
Model przyciągania podkreśla niewiedzę podmiotu o obserwatorach, podczas gdy model wypychania zakłada, że badani wiedzą coś o potrzebach swoich obserwatorów. Model "push" może sprawić, że obserwatorzy będą mniej przydatni do ponownego użycia, ponieważ klasy podmiotowe przyjmują założenia dotyczące klas Obserwatora, które nie zawsze są prawdziwe. Z drugiej strony model przyciągania może być nieefektywny, ponieważ klasy obserwatorów muszą ustalić, co zmieniło się bez pomocy podmiotu. "