Container (Entwurfsmuster)
# Container (Entwurfsmuster)

Das Container-Entwurfsmuster wird im Bereich der Softwareentwicklung verwendet. Es wird in die Gruppe der Strukturmuster eingeordnet.

## Verwendung

Das Container-Entwurfsmuster teilt die Anwendungslogik in zwei Bestandteile. Zum einen wird eine Komponente benötigt, welche gezielt ihre Hauptaufgabe erfüllt. Ein dazugehöriger Container versorgt die Komponente mit allen benötigten Schnittstellen zu anderen Systemen. Eine Erweiterung ist, dass die Komponenten im Container zur Laufzeit beliebig hinzugefügt oder entfernt werden können. Dieses Entwurfsmuster ist kein ursprüngliches Muster der GoF.

## Jakarta EE

Das Entwurfsmuster findet z. B. bei der Jakarta EE starke Verwendung und ist deren essentieller Bestandteil. So sind viele Dienste der Jakarta EE mit diesem Pattern konstruiert. Zum Beispiel der Web-Container, welcher Servlets beinhaltet. Andere Beispiele sind EJB-Container oder JMS-Provider.

## Bestandteile

Eine Komponente kapselt eine logische Information/Routine des Gesamtsystems. Sie kann zur Laufzeit verändert werden oder mit anderen Komponenten (eventuell aus anderen Containern) interagieren.
Jeder Container kann bestimmte Komponenten beinhalten. Die Komponenten werden komplett gekapselt und eventuelle Anfragen oder Ereignisse werden an diese vom Container weitergeleitet. Unter Umständen sorgt der Container mit bestimmten Routinen selbst für die Instanzierung der Komponenten.

## Vorteile

* Das Prinzip der Kapselung wird stark unterstützt
* Die Komplexität des Systems für Weiterentwicklung wird extrem vermindert
* Veränderungen an den Komponenten gestalten sich relativ einfach
* Hohe Testbarkeit, Veränderbarkeit und Stabilität

## Nachteile

* Teilweise höherer Aufwand bei der Entwicklung des Containers
* Eindeutige Definition der Schnittstelle zwischen Container und Komponente notwendig