Mercurial > docs > DesignPatterns
comparison detailed-observer.tex @ 34:b2cefbd90180
some redesign; new content for summary and appendix
author | meillo@marmaro.de |
---|---|
date | Sat, 11 Aug 2007 12:49:00 +0200 |
parents | 97b57d24fd7b |
children | 05f432307ba2 |
comparison
equal
deleted
inserted
replaced
33:97b57d24fd7b | 34:b2cefbd90180 |
---|---|
1 % @file | 1 % @file |
2 % @brief Referat DesignPatterns `Observer' | 2 % @brief Ausarbeitung DesignPatterns `Observer' |
3 % @author markus schnalke <meillo@marmaro.de> | 3 % @author markus schnalke <meillo@marmaro.de> |
4 % @since 2007-05-30 | 4 % @since 2007-05-30 |
5 | 5 |
6 | 6 |
7 \documentclass[a4paper]{scrartcl} | 7 \documentclass[a4paper]{scrartcl} |
26 | 26 |
27 %%%% Titlepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 27 %%%% Titlepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
28 \begin{titlepage} | 28 \begin{titlepage} |
29 \title{Observer-Pattern} | 29 \title{Observer-Pattern} |
30 \author{Markus Schnalke} | 30 \author{Markus Schnalke} |
31 \date{2007-07-04} | 31 \date{2007-08-11} |
32 | 32 |
33 | 33 |
34 \thispagestyle{empty} | 34 \thispagestyle{empty} |
35 | 35 |
36 | 36 |
360 | 360 |
361 | 361 |
362 \subsubsection{Wer ruft notify() auf?} | 362 \subsubsection{Wer ruft notify() auf?} |
363 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile: | 363 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile: |
364 | 364 |
365 \paragraph{Das Subject} | 365 \paragraph{Das Subject} |
366 \begin{itemize} | 366 Auf diese Weise wird notify() sicher bei jedem setState() aufgerufen, jedoch können die Update-Kosten bei vielen Änderungen in kurzer Zeit sehr hoch werden. |
367 \item[+] notify() wird sicher bei jedem setState() aufgerufen | 367 %\begin{itemize} |
368 \item[-] hohe Update-Kosten bei Änderungen en-block | 368 % \item[+] notify() wird sicher bei jedem setState() aufgerufen |
369 \end{itemize} | 369 % \item[-] hohe Update-Kosten bei Änderungen en-block |
370 | 370 %\end{itemize} |
371 | 371 |
372 \paragraph{Der Observer} | 372 |
373 \begin{itemize} | 373 \paragraph{Der Observer} |
374 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich | 374 Hier darf nun der Observer den Aufruf von notify() nicht vergessen, dieser kann jedoch zu einem günstigen Zeitpunkt erfolgen, was sich bei Änderungen en-block positiv auswirkt. |
375 \item[-] der Client darf den notify()-Aufruf nicht vergessen | 375 %\begin{itemize} |
376 \end{itemize} | 376 % \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich |
377 % \item[-] der Client darf den notify()-Aufruf nicht vergessen | |
378 %\end{itemize} | |
377 | 379 |
378 | 380 |
379 | 381 |
380 | 382 |
381 | 383 |
388 | 390 |
389 | 391 |
390 \newpage | 392 \newpage |
391 | 393 |
392 \section{Zusammenfassung} | 394 \section{Zusammenfassung} |
393 %\textbf{Zusammenfassend} | 395 |
394 | 396 Ich habe in meiner Ausarbeitung bisher ganz bewusst auf Quellcode verzichtet, denn ich wollte Design Pattern einmal von der anderen Seite her erklären. Ich wollte vermitteln weshalb das Observer-Pattern so aufgebaut ist wie es ist. Ich wollte Verständnis für Design Patterns entwickeln und zeigen, dass sie absolut logische Lösungen sind. |
395 Ich habe in meiner Ausarbeitung bisher ganz bewusst auf Quellcode verzichtet, denn ich wollte vermitteln weshalb das Observer-Pattern so aufgebaut ist wie es ist. Ich wollte Verständnis für Design Patterns entwickeln und zeigen, dass sie absolut logische Lösungen sind. | |
396 | |
397 Design Patterns sind dabei Modelle wie Quellcode aufgebaut werden sollte. Sie sind kein Code --- sie beschreiben nur wie Code sein sollte. Das ist auch ganz gut so, denn: | |
398 | |
399 \begin{quote} | |
400 \textbf{ Implementierungen sind Schall und Rauch,\\ | |
401 Konzepte dagegen bleiben bestehen! } | |
402 \end{quote} | |
403 | |
404 Aus diesem Grund will ich mich mit Quelltext auf dieses Beispiel im Anhang beschränken. Dennoch finde ich es wichtig, doch zumindest eine Beispiel-Implementierung vorzeigen zu können, da Quellcode sehr aussagekräftig sein kann. In jeden Fall wird er meine sonstigen Ausführungen gut abrunden. | |
405 | |
406 | 397 |
407 \paragraph{In drei Sätzen:} | 398 \paragraph{In drei Sätzen:} |
408 \begin{itemize} | 399 \begin{itemize} |
409 \item Menschen denken basierend auf der Realität | 400 \item Menschen denken basierend auf der Realität |
410 \item deshalb Design Patterns auf Realität zurückführen | 401 \item deshalb Design Patterns auf Realität zurückführen |
411 \item Patterns anwenden weil man es in der Realität auch so machen würde | 402 \item Patterns anwenden weil man es in der Realität auch so machen würde |
412 \end{itemize} | 403 \end{itemize} |
413 | 404 |
414 | 405 |
406 Design Patterns sind dabei Modelle wie Quellcode aufgebaut werden sollte. Sie sind kein Code --- sie beschreiben nur wie Code sein sollte. Das ist auch ganz gut so, denn: | |
407 | |
408 \begin{quote} | |
409 \textbf{Implementierungen sind Schall und Rauch,\\ | |
410 Konzepte dagegen bleiben bestehen! } | |
411 \end{quote} | |
412 | |
413 Design Patterns sind Konzepte --- Programmiersprachen kommen und gehen, Design Patterns überleben. Wenn man also in die Zukunft investieren möchte, dann sollte man sich Design Patterns aneignen, denn diese Investition ist risikofrei und zudem hoch rentabel! | |
414 | |
415 \vspace{10ex} | |
416 | |
417 \textit{Ich wollte euch von dieser Erkenntnis überzeugen. Ich wollte euch für Patterns begeistern. Ich hoffe das ist mir gelungen :-) } | |
418 | |
419 \begin{flushright} | |
420 markus schnalke | |
421 \end{flushright} | |
422 | |
423 | |
424 | |
425 | |
415 | 426 |
416 | 427 |
417 | 428 |
418 \appendix | 429 \appendix |
419 | 430 |
420 \newpage | 431 \newpage |
421 | 432 |
422 \section{Beispiel-Implementierung} | 433 \section{Beispiel-Implementierung} |
434 | |
435 Ich möchte mich mit Quelltext auf dieses Beispiel im Anhang beschränken. Dennoch finde ich es wichtig, zumindest eine Beispiel-Implementierung vorzeigen zu können, da Quellcode sehr aussagekräftig sein kann. In jeden Fall wird er meine sonstigen Ausführungen gut abrunden. Hier also eine Realisierung in Java: | |
436 | |
437 \vspace{4ex} | |
423 | 438 |
424 {\scriptsize | 439 {\scriptsize |
425 \lstinputlisting[language=java]{code/observer-example.java} | 440 \lstinputlisting[language=java]{code/observer-example.java} |
426 } | 441 } |
427 \flushright{ \tiny Quellcode von http://java2s.com } | 442 \begin{flushright} |
443 {\tiny Quellcode von http://java2s.com} | |
444 \end{flushright} | |
428 | 445 |
429 | 446 |
430 | 447 |
431 | 448 |
432 | 449 |