Mercurial > docs > DesignPatterns
comparison detailed-observer.tex @ 32:3d6e01222e28
added content
author | meillo@marmaro.de |
---|---|
date | Mon, 06 Aug 2007 02:25:32 +0200 |
parents | f567cec0d755 |
children | 97b57d24fd7b |
comparison
equal
deleted
inserted
replaced
31:f567cec0d755 | 32:3d6e01222e28 |
---|---|
304 \paragraph{Auch bekannt als} | 304 \paragraph{Auch bekannt als} |
305 Publish-Subscribe, Dependents | 305 Publish-Subscribe, Dependents |
306 | 306 |
307 | 307 |
308 \paragraph{Zweck} | 308 \paragraph{Zweck} |
309 Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert. | 309 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert. |
310 % todo: besser formulieren | 310 % todo: besser formulieren |
311 | 311 |
312 | 312 |
313 \paragraph{Kurzbeschreibung} | 313 \paragraph{Kurzbeschreibung} |
314 Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert | 314 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert |
315 werden können, und um die abhängigen Objekte über Zustandsänderungen zu | 315 werden können, und um die abhängigen Objekte über Zustandsänderungen zu |
316 informieren. | 316 informieren. |
317 % todo: Formulierung überdenken | 317 % todo: Formulierung überdenken |
318 | 318 |
319 | 319 |
349 \subsubsection{Ein Observer und mehrere Subjects} | 349 \subsubsection{Ein Observer und mehrere Subjects} |
350 Oft ist es nicht nur ein einziges Subject, das beobachtet werden soll. Damit ein Observer mehrere Subjects beobachten kann, muss er den Namen des Subjects mitsenden. So kann festgestellt werden welches Subject betroffen ist. | 350 Oft ist es nicht nur ein einziges Subject, das beobachtet werden soll. Damit ein Observer mehrere Subjects beobachten kann, muss er den Namen des Subjects mitsenden. So kann festgestellt werden welches Subject betroffen ist. |
351 | 351 |
352 | 352 |
353 \subsubsection{Nur für bestimmte Informationen anmelden} | 353 \subsubsection{Nur für bestimmte Informationen anmelden} |
354 Eine weitere kleine Erweiterung ist die Anmeldung am Subject für nur bestimmte Informationen. Dies ist sicher auch eine Ergänzung die unsere Pinnwand verbesser hätte. So wäre es dann möglich gewesen sich nur für Zimmerangebote oder ähnliches anzumelden. | 354 Eine weitere kleine Erweiterung ist die Anmeldung am Subject für nur bestimmte Informationen. Dies ist sicher auch eine Ergänzung die unsere Pinnwand verbesser hätte. So wäre es dann möglich gewesen sich nur für Zimmerangebote oder ähnliches anzumelden. So werden auch die unnötigen Updates verringert, was positiv auf die Performance wirken kann. |
355 \item Oberservers melden sich nur für bestimmte Informationen an | 355 |
356 \item Es werden weniger uninteressante Updates gesendet | 356 |
357 | 357 \subsubsection{ChangeManager} |
358 | 358 Bei komplexen Update-Zusammenhängen ist es empfehlenswert einen ChangeManager zwischen die verschiedenen Subjects und Observers zu stellen. Dieser vermittelt dann zwischen den Beteiligten und koordiniert die Update-Vorgänge. Der ChangeManager ist eine Instanz vom Mediator-Pattern und üblicherweise Singleton, da normalerweise nur einer für alle Observer-Beziehungen verwendet wird. |
359 \subsubsection{UpdateManager} | 359 |
360 \begin{itemize} | |
361 \item Bei komplexen Update-Zusammenhängen empfehlenswert | |
362 \item vermittelt zwischen Subject und Observer | |
363 \item (Mehr dazu in der Ausarbeitung) | |
364 \end{itemize} | |
365 | |
366 | |
367 | |
368 | 360 |
369 \subsubsection{Wer ruft notify() auf?} | 361 \subsubsection{Wer ruft notify() auf?} |
362 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile: | |
370 | 363 |
371 \paragraph{Das Subject} | 364 \paragraph{Das Subject} |
372 \begin{itemize} | 365 \begin{itemize} |
373 \item[+] notify() wird sicher bei jedem setState() aufgerufen | 366 \item[+] notify() wird sicher bei jedem setState() aufgerufen |
374 \item[-] hohe Update-Kosten bei Änderungen en-block | 367 \item[-] hohe Update-Kosten bei Änderungen en-block |
379 \begin{itemize} | 372 \begin{itemize} |
380 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich | 373 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich |
381 \item[-] der Client darf den notify()-Aufruf nicht vergessen | 374 \item[-] der Client darf den notify()-Aufruf nicht vergessen |
382 \end{itemize} | 375 \end{itemize} |
383 | 376 |
384 | |
385 | |
386 | |
387 | |
388 | |
389 | |
390 | |
391 | |
392 | |
393 | |
394 | |
395 | 377 |
396 | 378 |
397 | 379 |
398 | 380 |
399 | 381 |
416 | 398 |
417 | 399 |
418 | 400 |
419 | 401 |
420 | 402 |
421 Erklaerung des Vorgehens | 403 |
422 Frage: war es erfolgreich? | |
423 \textbf{} | |
424 | |
425 \paragraph{} | |
426 | |
427 | 404 |
428 | 405 |
429 | 406 |
430 \section{Abschließend} | 407 \section{Abschließend} |
431 \paragraph{Verwendete Software} | 408 \paragraph{Verwendete Software} |
432 \begin{itemize} | 409 \begin{itemize} |
433 \item Debian GNU/Linux | 410 \item Debian GNU/Linux |
434 \item \LaTeX-Beamer und \texttt{pdflatex} | 411 \item \texttt{pdflatex} |
435 \item Vim | 412 \item Vim |
436 \item qiv und ImageMagick | 413 \item qiv und ImageMagick |
437 \item Mercurial | 414 \item Mercurial |
438 \end{itemize} | 415 \end{itemize} |
439 | 416 |
440 | |
441 \paragraph{} | |
442 \vspace{3ex} | |
443 \centerline{\textbf{Danke für eure Aufmerksamkeit}} | |
444 | |
445 | 417 |
446 | 418 |
447 | 419 |
448 | 420 |
449 | 421 |
450 | 422 |
451 | 423 |
452 \appendix | 424 \appendix |
453 | 425 |
454 \section{Code} | 426 \section{Code} |
455 \textbf{Code? --- Nein, kein Code!} | 427 \textbf{ Implementierungen sind Schall und Rauch,\\ Konzepte dagegen bleiben bestehen! } |
456 \paragraph{Denn} | |
457 \begin{center} | |
458 \textbf{ Implementierungen sind Schall und Rauch,\\ | |
459 Konzepte dagegen bleiben bestehen! } | |
460 \end{center} | |
461 | |
462 | |
463 \vspace{4ex} | |
464 {\scriptsize | |
465 \paragraph{} | |
466 \textit{ Beispiel-Implementierung in der Ausarbeitung. } | |
467 | |
468 } | |
469 | 428 |
470 | 429 |
471 | 430 |
472 | 431 |
473 | 432 |