-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaCollection.java
More file actions
67 lines (60 loc) · 1.8 KB
/
MaCollection.java
File metadata and controls
67 lines (60 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package iterator;
/**
* Classe MaCollection
*
* Cette classe est un exemple d'implémentation du patron Iterator.
* Elle utilise un tableau d'Object pour garder les éléments de
* la collection.
*
* @author Vincent Lacasse
*
*/
public class MaCollection implements Iterable {
public static final int MAX = 10;
private int compteur = 0;
private Object[] tableau = new Object[MAX];
/**
* Ajoute un élément à la collection
* @param o - élément à ajouter
*/
public void ajouter(Object o) {
if (compteur < MAX)
tableau[compteur++] = o;
}
/**
* Retourne un Iterateur pour cette collection
*
* Cette méthode est nécessaire à l'implémentation du patron Iterator.
* Elle instancie un nouvel Iterateur et retourne l'instance à la méthode
* appelante. Il est important d'instancier un nouvel Iterateur. Cela permet,
* entre autres, de pourvoir utiliser plusieurs iterateurs en même temps.
*
* @see iterator.Iterable#createIterator()
* @return un Iterateur pour cette collection
*/
public Iterateur createIterator() {
return new MaCollectionIterateur();
}
/**
* Classe MaCollectionIterateur
*
* La plupart des implémentations du patron Iterator déclare l'itérateur comme
* une classe interne et privée de la collection, comme démontré dans ce cas-ci.
* Bien que cette approche n'est pas une condition nécessaire pour l'implémentation
* du patron, elle comporte plusieurs avantages: une bonne encapsulation, et la
* classe MaCollectionIterateur a accès aux membres de la classe MaCollection.
*/
private class MaCollectionIterateur implements Iterateur
{
int courant = 0;
public boolean hasNext() {
return courant < compteur;
}
public Object next() {
if (hasNext())
return tableau[courant++];
else
return null;
}
}
}