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