Nicolas Delsaux wrote:
Et le meilleur moyen est d'utiliser les interfaces partout au lieu du type concret.
Oui, �videment, je ne peux qu'�tre d'accord avec toi. Mais on parlait au d�but d'une impl�mentation de liste li�e. Apr�s, dans l'utilisation, il vaut mieux effectivement masquer l'impl�mentation.
Toutefois, j'y ai un peu r�fl�chi cette nuit, et je ne suis plus si s�r qu'il faille absolument masquer cette impl�mentation :
si on utilise une liste li�e plut�t qu'une ArrayList, c'est manifestement parce qu'on veut b�n�ficier des optimisations de parcours. Dans le cas extr�me, on veut m�me b�n�ficer de la possibilit� fabuleuse offerte par la LinkedList de r�cup�rer le d�but ou la fin de la liste. Et dans ce cas, il faut bien garder la r�f�rence sur la classe, et non l'interface.
Pas bon:
ArrayList l = new ArrayList();
Sauf dans des cas bien pr�cis.
Bon:
List l = new ArrayList();
Le cas g�n�ral � utiliser par d�faut, effectivement.
L�, je suis beaucoup moins d'accord : g�n�rallement, j'utilise des types de base en tant que variables membres d'une classe. Et je ne vois pas pourquoi j'irais initialiser mes variables internes avec une factory, c'est-�-dire une classe ext�rieure, qui ne conna�t pas, par d�faut, le fonctionnement de ma classe.
Ideal:
List l = MyFactory.createList();
J'en profite pour rappeler ma regle: pour les types tres generiques, le mot-cle "new" ne doit se trouver *que* dans des classes de type factory. Jamais dans ton code principal.
En l'occurence, je pr�f�re faire appel � une m�thode protected init() {
maListe = new ArrayList();
}
que j'appelle dans chacun de mes constructeurs, qui me permet de centraliser mon code d'initialisation, et de garder dans ma classe les choses qui lui appartiennent. Le pattern factory est pour moi applicable aux "gros" objets, aux �l�ments importants d'une application. Pour les types de base, ou comme tu le dis les types g�n�riques, je pr�f�re largement garder la main, sauf lorsque l'initialisation de mon objet d�pend d'une circonstance ext�rieure.
--
Nicolas Delsaux
"Celui qui sait en quoi consiste l'action humaine nourrit ce que sa conscience saisit au moyen de ce qu'elle ne saisit pas."
