Après la présentation du design pattern Bridge (le pont), nous passons à un patron de conception un peu plus simple, et pourtant bien pratique pour encapsuler des éléments d’un même type : le design pattern Composite. Souvent utilisé avec le patron Decorator ou bien Iterator, il est très souvent utilisé.
Pour suivre le projet : le github.
Problématique ?
Toujours dans notre futur jeu-vidéo, nous souhaitons avoir des robots, qui une fois assemblés, pourront voler; tout en prenant en compte que chaque robot a lui aussi la capacité de voler.
Comment mettre ça en place proprement ? De plus, comment savoir par exemple la vitesse maximale du vaisseau créé ?
Une première solution
Ici, nous pouvons supposer que le vaisseau est un composite de robots, et possiblement de tout item ayant la capacité de voler.
Nous avons alors :
- une interface : IPlaner, représentant l’interface commune entre la Composition, et les composants,
- une composition : Ship, contenant des IPlaner, et implémentant IPlaner.
- des composants : Robot, implémentant IPlaner.
Comment faire ?
Voici le diagramme de classe :
Voici la mise en place :
D’autres patrons possibles
Pensez aussi au Decorator, ou bien à l’Iterator.