Revenons un peu à not' java. On a vu que le framework de collections était composé d'un ensemble d'interfaces et d'implémentations. Ces implémentations sont des implémentations générales, toutes les implémentations du framework de collection sont en lecture/écriture et non synchronisées. Il y a bien le cas de Vector, mais elle est là depuis java 1.0, et je rappelle que le framework est apparu avec java 2.

Donc, il y a un réel besoin de décorer les collections pour les syncrhoniser, ou les mettre en read only. Ou une autre décoration, peut importe, le principe est le même. Et cela se fait par l'utilisation d'un pattern décorateur. Le rôle de ce pattern est de rajouter de manière transparente pour l'utilisateur des capacités (ou en supprimer) à un objet.

pattern décorateur du framework de collection

Pour utiliser ce principe, il y a une classe très pratique : java.util.Collections. Les méthodes statiques de cette classe permettent de réaliser une décoration de collection simplement. Par exemple, si je veux une liste synchronisée, je vais pouvoir utiliser :

List synchronized list = Collections.synchronizedList (new ArrayList ());

Bien évidemment, on peut mixer les décorations. Comme pour faire une collection synchronisée et read only :

List synchronized list = Collections.synchronizedList (Collections.unmodifiableList (new ArrayList ()));

Bien évidemment, en cas de besoin, on peut créer ses propres décorations que l'on pourra utiliser en plus. Par exemple, j'en ai déjà implémentée une qui faisait de la vérification de cardinalité sur la collection.