docs/DesignPatterns

changeset 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
files code/observer-example.java detailed-observer.tex
diffstat 2 files changed, 68 insertions(+), 51 deletions(-) [+]
line diff
     1.1 --- a/code/observer-example.java	Fri Aug 10 22:15:51 2007 +0200
     1.2 +++ b/code/observer-example.java	Sat Aug 11 12:49:00 2007 +0200
     1.3 @@ -1,31 +1,31 @@
     1.4 -        import java.util.Observable;
     1.5 -        import java.util.Observer;
     1.6 +    import java.util.Observable;
     1.7 +    import java.util.Observer;
     1.8  
     1.9 -        public class MessageBoard extends Observable {
    1.10 -          private String message;
    1.11 +    public class MessageBoard extends Observable {
    1.12 +      private String message;
    1.13  
    1.14 -          public String getMessage() {
    1.15 -            return message;
    1.16 -          }
    1.17 +      public String getMessage() {
    1.18 +        return message;
    1.19 +      }
    1.20  
    1.21 -          public void changeMessage(String message) {
    1.22 -            this.message = message;
    1.23 -            setChanged();
    1.24 -            notifyObservers(message);
    1.25 -          }
    1.26 +      public void changeMessage(String message) {
    1.27 +        this.message = message;
    1.28 +        setChanged();
    1.29 +        notifyObservers(message);
    1.30 +      }
    1.31  
    1.32 -          public static void main(String[] args) {
    1.33 -            MessageBoard board = new MessageBoard();
    1.34 -            Student bob = new Student();
    1.35 -            Student joe = new Student();
    1.36 -            board.addObserver(bob);
    1.37 -            board.addObserver(joe);
    1.38 -            board.changeMessage("More Homework!");
    1.39 -          }
    1.40 -        }
    1.41 +      public static void main(String[] args) {
    1.42 +        MessageBoard board = new MessageBoard();
    1.43 +        Student bob = new Student();
    1.44 +        Student joe = new Student();
    1.45 +        board.addObserver(bob);
    1.46 +        board.addObserver(joe);
    1.47 +        board.changeMessage("More Homework!");
    1.48 +      }
    1.49 +    }
    1.50  
    1.51 -        class Student implements Observer {
    1.52 -          public void update(Observable o, Object arg) {
    1.53 -            System.out.println("Message board changed: " + arg);
    1.54 -          }
    1.55 -        }
    1.56 +    class Student implements Observer {
    1.57 +      public void update(Observable o, Object arg) {
    1.58 +        System.out.println("Message board changed: " + arg);
    1.59 +      }
    1.60 +    }
     2.1 --- a/detailed-observer.tex	Fri Aug 10 22:15:51 2007 +0200
     2.2 +++ b/detailed-observer.tex	Sat Aug 11 12:49:00 2007 +0200
     2.3 @@ -1,5 +1,5 @@
     2.4  % @file
     2.5 -% @brief   Referat DesignPatterns `Observer'
     2.6 +% @brief   Ausarbeitung DesignPatterns `Observer'
     2.7  % @author  markus schnalke <meillo@marmaro.de>
     2.8  % @since   2007-05-30
     2.9  
    2.10 @@ -28,7 +28,7 @@
    2.11  \begin{titlepage}
    2.12    \title{Observer-Pattern}
    2.13    \author{Markus Schnalke}
    2.14 -  \date{2007-07-04}
    2.15 +  \date{2007-08-11}
    2.16  
    2.17  
    2.18    \thispagestyle{empty}
    2.19 @@ -362,18 +362,20 @@
    2.20    \subsubsection{Wer ruft notify() auf?}
    2.21    Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile:
    2.22  
    2.23 -    \paragraph{Das Subject}
    2.24 -    \begin{itemize}
    2.25 -      \item[+] notify() wird sicher bei jedem setState() aufgerufen
    2.26 -      \item[-] hohe Update-Kosten bei Änderungen en-block
    2.27 -    \end{itemize}
    2.28 +  \paragraph{Das Subject}
    2.29 +    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.
    2.30 +    %\begin{itemize}
    2.31 +    %  \item[+] notify() wird sicher bei jedem setState() aufgerufen
    2.32 +    %  \item[-] hohe Update-Kosten bei Änderungen en-block
    2.33 +    %\end{itemize}
    2.34    
    2.35  
    2.36 -    \paragraph{Der Observer}
    2.37 -    \begin{itemize}
    2.38 -      \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
    2.39 -      \item[-] der Client darf den notify()-Aufruf nicht vergessen
    2.40 -    \end{itemize}
    2.41 +  \paragraph{Der Observer}
    2.42 +    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.
    2.43 +    %\begin{itemize}
    2.44 +    %  \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
    2.45 +    %  \item[-] der Client darf den notify()-Aufruf nicht vergessen
    2.46 +    %\end{itemize}
    2.47    
    2.48  
    2.49  
    2.50 @@ -390,19 +392,8 @@
    2.51  \newpage
    2.52  
    2.53  \section{Zusammenfassung}
    2.54 - %\textbf{Zusammenfassend}
    2.55    
    2.56 -  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.
    2.57 -
    2.58 -  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:
    2.59 -
    2.60 -  \begin{quote}
    2.61 -    \textbf{ Implementierungen sind Schall und Rauch,\\ 
    2.62 -    Konzepte dagegen bleiben bestehen!  }
    2.63 -  \end{quote}
    2.64 -
    2.65 -  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.
    2.66 -
    2.67 +  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.
    2.68  
    2.69    \paragraph{In drei Sätzen:}
    2.70      \begin{itemize}
    2.71 @@ -412,6 +403,26 @@
    2.72      \end{itemize}
    2.73  
    2.74  
    2.75 +  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:
    2.76 +
    2.77 +  \begin{quote}
    2.78 +    \textbf{Implementierungen sind Schall und Rauch,\\ 
    2.79 +    Konzepte dagegen bleiben bestehen!  }
    2.80 +  \end{quote}
    2.81 +
    2.82 +  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!
    2.83 +
    2.84 +  \vspace{10ex}
    2.85 +
    2.86 +  \textit{Ich wollte euch von dieser Erkenntnis überzeugen. Ich wollte euch für Patterns begeistern. Ich hoffe das ist mir gelungen  :-) } 
    2.87 +
    2.88 +  \begin{flushright}
    2.89 +    markus schnalke
    2.90 +  \end{flushright}
    2.91 +
    2.92 +
    2.93 +
    2.94 +
    2.95  
    2.96  
    2.97  
    2.98 @@ -421,10 +432,16 @@
    2.99  
   2.100  \section{Beispiel-Implementierung}
   2.101  
   2.102 +  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:
   2.103 +
   2.104 +  \vspace{4ex}
   2.105 +
   2.106    {\scriptsize
   2.107      \lstinputlisting[language=java]{code/observer-example.java}
   2.108    }
   2.109 -  \flushright{ \tiny Quellcode von http://java2s.com }
   2.110 +  \begin{flushright}
   2.111 +    {\tiny Quellcode von http://java2s.com}
   2.112 +  \end{flushright}
   2.113  
   2.114  
   2.115