Skip to content

MichaelZett/patterns

Repository files navigation

Entwurfsmuster — Schulungs-Beispiele

Kompakte Java-Beispiele zu allen 23 Entwurfsmustern der „Gang of Four" (plus Interpreter). Gedacht für Schulungen und Selbststudium: jedes Muster steht für sich, ist klein gehalten und in deutscher Sprache benannt — der Code soll das Muster zeigen, nicht produktionsreif sein.

Aufbau

Jedes Muster ist ein eigenes IntelliJ-Modul auf der Repo-Wurzel:

patterns/
├── singleton/
│   └── src/de/zettsystems/patterns/singleton/...
├── strategy/
│   └── src/de/zettsystems/patterns/strategy/...
├── observer/
│   └── src/de/zettsystems/patterns/observer/...
└── ...

Standard-Package: de.zettsystems.patterns.<muster>. Jedes Modul ist unabhängig — keine gemeinsamen Abhängigkeiten, kein Build-Tool, nur die JDK.

Voraussetzungen

  • JDK 21 (im Projekt-SDK fest verdrahtet, .idea/misc.xml).
  • IntelliJ IDEA zum bequemen Ausführen (öffne das Repo-Root als Projekt, alle Module werden automatisch erkannt). Andere IDEs funktionieren ebenso, brauchen aber ggf. manuelles Anlegen der Module.

Enthaltene Muster

Erzeugungsmuster

  • abstractfactory — Abstract Factory
  • builder — Builder
  • factorymethod — Factory Method
  • prototype — Prototype
  • singleton — Singleton (mehrere Implementierungs-Varianten: Eager, Lazy, Synchronized Lazy, Double-Checked Locking, Lazy-Holder-Idiom, plus zwei bewusst kaputte Beispiele zum Diskutieren; Demo ruft alle nebeneinander auf)

Strukturmuster

  • adapter — Adapter
  • bridge — Bridge
  • composite — Composite (zwei Varianten: breit und schmal — siehe Modul, demonstriert die zwei klassischen Gestaltungsalternativen)
  • decorator — Decorator
  • facade — Facade
  • flyweight — Flyweight
  • proxy — Proxy

Verhaltensmuster

  • chainofres — Chain of Responsibility
  • command — Command
  • interpreter — Interpreter
  • iterator — Iterator (zwei Demos: MyArray und MyList)
  • mediator — Mediator
  • memento — Memento
  • observer — Observer
  • state — State
  • strategy — Strategy
  • templatemethod — Template Method
  • visitor — Visitor

Beispiele ausführen

In IntelliJ

Repo öffnen → in das gewünschte Modul navigieren → die Demo-Klasse mit der main-Methode öffnen → grüner Pfeil im Gutter. Welche Klasse pro Modul den Einstieg bildet (Namen sind nicht einheitlich: Test, Testklasse, Client, ApplStart, Kontext, …), steht in AGENTS.md.

Auf der Kommandozeile

Ein Modul kompilieren und ausführen, hier am Beispiel strategy:

mkdir -p out/strategy
find strategy/src -name "*.java" -print0 | xargs -0 javac -d out/strategy
java -cp out/strategy de.zettsystems.patterns.strategy.Kontext

Für andere Module den Pfad und den vollqualifizierten Klassennamen entsprechend anpassen.

Code-Konventionen

  • Sprache: Klassen, Methoden, Variablen und Kommentare sind auf Deutsch (Mahlzeit, Pizzeria, bestellen(), …) — bewusst, weil die Beispiele in einem deutschsprachigen Schulungs-Kontext entstanden sind.
  • Stil: schlicht, lehrbuchnah. Bewusst keine modernen Java-Features, wenn das vom Muster ablenkt.

Beitragen / Anpassen

Pull Requests und Issues sind willkommen, vor allem wenn ein Muster verständlicher illustriert werden kann oder zusätzliche Varianten didaktisch hilfreich wären. Hinweise zur Repo-Struktur und zu Konventionen für neue Module stehen in AGENTS.md.

Lizenz

MIT — Beispielcode darf frei verwendet, angepasst und weitergegeben werden.

About

Java Design Patterns sample collection — training material (Java 17+)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages