%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/strategy.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
Design Pattern: Strategy
\end{center}

\section{Designprinzip}
Algorithmen kapseln und austauschbar machen durch Komposition statt Vererbung.

\section{Java-Code}

\subsection{Strategieschnittstelle}
\lstset{language=Java}
\begin{lstlisting}[frame=tlRB]
public interface StrategieSchnittstelle {
	public abstract void algorithmus();
}
\end{lstlisting}

\subsection{Konkrete Strategien}
\lstset{language=Java}
\begin{lstlisting}[frame=tlRB]
public class StrategieA implements StrategieSchnittstelle {
	@Override
	public void algorithmus() { System.out.println("Version A"); }
}
\end{lstlisting}

\lstset{language=Java}
\begin{lstlisting}[frame=tlRB]
public class StrategieB implements StrategieSchnittstelle {
	@Override
	public void algorithmus() { System.out.println("Version B"); }
}
\end{lstlisting}

\subsection{Client}
Muß bei Änderung der Strategie nicht verändert werden.
\lstset{language=Java}
\begin{lstlisting}[frame=tlRB]
public class Client {
	private StrategieSchnittstelle algorithmus;
	
	public void setStrategie(StrategieSchnittstelle al){ algorithmus = al; }
	
	public void tuwas(){ algorithmus.algorithmus(); }
}
\end{lstlisting}

\subsection{Verwendung des Clients}
Änderung der Strategie zur Laufzeit möglich
\lstset{language=Java}
\begin{lstlisting}[frame=tlRB]
Client client = new Client();
client.setStrategie(new StrategieA());
client.tuwas();   // "Version A"
client.setStrategie(new StrategieB());
client.tuwas();   // "Version B"
\end{lstlisting}


\begin{thebibliography}{999}
\bibitem [Head First Design Patterns]{} \url{http://www.oreilly.de/catalog/9780596007126/}
\bibitem [Wikipedia]{}  \url{http://de.wikipedia.org/wiki/Strategie_(Entwurfsmuster)}
\end{thebibliography}

\end{document}

