java:adapter
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| java:adapter [2018/11/13 20:11] – créée bruno | java:adapter [2018/11/23 08:27] (Version actuelle) – [Deuxième approche: la composition] bruno | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ça arrive. | + | ====== Le design pattern Adapter ====== |
| + | //Vous avez besoin de certaines fonctionnalités d'un objet qui répond en partie à vos besoins, mais cet objet propose également de nombreuses fonctionnalités que vous ne voulez pas exposer ou utiliser?// | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | La pattern Adapter illustre toute la puissance et l' | ||
| + | |||
| + | ===== Un premier exemple ===== | ||
| + | Vous souhaitez disposer d'une classe qui représente un mot de passe. | ||
| + | |||
| + | Un mot de passe: | ||
| + | - doit contenir au moins une majuscule | ||
| + | - doit contenir au moins une minuscule | ||
| + | - doit au moins un chiffre | ||
| + | - doit faire au moins 8 caractères. | ||
| + | |||
| + | Un mot de passe est une chaîne de caractères. Vous pensez tout de suite à la classe String de java, mais en regardant l' | ||
| + | |||
| + | Pire même: elle peuvent se révéler dangereuses pour représenter un mot de passe (pas de contrôle de validité, possibilité de modifier sans contrôle le mot de passe, etc.). | ||
| + | |||
| + | ==== Première approche naïve: héritage ==== | ||
| + | |||
| + | La première solution semble être l' | ||
| + | |||
| + | Quel problème cela pose-t-il? | ||
| + | |||
| + | < | ||
| + | Voici la classe String de java (uniquement ce qui est public): | ||
| + | {{ : | ||
| + | |||
| + | Avez-vous vraiment envie de redéfinir toutes ces méthodes? | ||
| + | </ | ||
| + | |||
| + | ==== Deuxième approche: la composition ==== | ||
| + | Admettons que les fonctionnalités utiles de String pour notre problème sont les suivantes: | ||
| + | |||
| + | {{ : | ||
| - | Exemple de point/point positif | ||
java/adapter.1542139912.txt.gz · Dernière modification : 2018/11/13 20:11 de bruno