# HG changeset patch # User meillo@marmaro.de # Date 1186829340 -7200 # Node ID b2cefbd90180fa3144e97d7a90ae2e264b637b19 # Parent 97b57d24fd7b92a412f583a6540dda89c1a0d48d some redesign; new content for summary and appendix diff -r 97b57d24fd7b -r b2cefbd90180 code/observer-example.java --- a/code/observer-example.java Fri Aug 10 22:15:51 2007 +0200 +++ b/code/observer-example.java Sat Aug 11 12:49:00 2007 +0200 @@ -1,31 +1,31 @@ - import java.util.Observable; - import java.util.Observer; + import java.util.Observable; + import java.util.Observer; - public class MessageBoard extends Observable { - private String message; + public class MessageBoard extends Observable { + private String message; - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public void changeMessage(String message) { - this.message = message; - setChanged(); - notifyObservers(message); - } + public void changeMessage(String message) { + this.message = message; + setChanged(); + notifyObservers(message); + } - public static void main(String[] args) { - MessageBoard board = new MessageBoard(); - Student bob = new Student(); - Student joe = new Student(); - board.addObserver(bob); - board.addObserver(joe); - board.changeMessage("More Homework!"); - } - } + public static void main(String[] args) { + MessageBoard board = new MessageBoard(); + Student bob = new Student(); + Student joe = new Student(); + board.addObserver(bob); + board.addObserver(joe); + board.changeMessage("More Homework!"); + } + } - class Student implements Observer { - public void update(Observable o, Object arg) { - System.out.println("Message board changed: " + arg); - } - } + class Student implements Observer { + public void update(Observable o, Object arg) { + System.out.println("Message board changed: " + arg); + } + } diff -r 97b57d24fd7b -r b2cefbd90180 detailed-observer.tex --- a/detailed-observer.tex Fri Aug 10 22:15:51 2007 +0200 +++ b/detailed-observer.tex Sat Aug 11 12:49:00 2007 +0200 @@ -1,5 +1,5 @@ % @file -% @brief Referat DesignPatterns `Observer' +% @brief Ausarbeitung DesignPatterns `Observer' % @author markus schnalke % @since 2007-05-30 @@ -28,7 +28,7 @@ \begin{titlepage} \title{Observer-Pattern} \author{Markus Schnalke} - \date{2007-07-04} + \date{2007-08-11} \thispagestyle{empty} @@ -362,18 +362,20 @@ \subsubsection{Wer ruft notify() auf?} Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile: - \paragraph{Das Subject} - \begin{itemize} - \item[+] notify() wird sicher bei jedem setState() aufgerufen - \item[-] hohe Update-Kosten bei Änderungen en-block - \end{itemize} + \paragraph{Das Subject} + 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. + %\begin{itemize} + % \item[+] notify() wird sicher bei jedem setState() aufgerufen + % \item[-] hohe Update-Kosten bei Änderungen en-block + %\end{itemize} - \paragraph{Der Observer} - \begin{itemize} - \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich - \item[-] der Client darf den notify()-Aufruf nicht vergessen - \end{itemize} + \paragraph{Der Observer} + 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. + %\begin{itemize} + % \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich + % \item[-] der Client darf den notify()-Aufruf nicht vergessen + %\end{itemize} @@ -390,19 +392,8 @@ \newpage \section{Zusammenfassung} - %\textbf{Zusammenfassend} - 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. - - 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: - - \begin{quote} - \textbf{ Implementierungen sind Schall und Rauch,\\ - Konzepte dagegen bleiben bestehen! } - \end{quote} - - 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. - + 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. \paragraph{In drei Sätzen:} \begin{itemize} @@ -412,6 +403,26 @@ \end{itemize} + 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: + + \begin{quote} + \textbf{Implementierungen sind Schall und Rauch,\\ + Konzepte dagegen bleiben bestehen! } + \end{quote} + + 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! + + \vspace{10ex} + + \textit{Ich wollte euch von dieser Erkenntnis überzeugen. Ich wollte euch für Patterns begeistern. Ich hoffe das ist mir gelungen :-) } + + \begin{flushright} + markus schnalke + \end{flushright} + + + + @@ -421,10 +432,16 @@ \section{Beispiel-Implementierung} + 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: + + \vspace{4ex} + {\scriptsize \lstinputlisting[language=java]{code/observer-example.java} } - \flushright{ \tiny Quellcode von http://java2s.com } + \begin{flushright} + {\tiny Quellcode von http://java2s.com} + \end{flushright}