20 - seeren-training/Design-Pattern GitHub Wiki
Iterator
- 🔖 Définition
- 🔖 Implémentation
📑 Définition
Quels problèmes le design pattern Iterator peut-il résoudre?
- Les éléments d'un objet agrégé doivent être accédés et traversés sans exposer sa représentation (structures de données).
- De nouvelles opérations de traversée doivent être définies pour un objet agrégé sans changer son interface.
Quelle solution le modèle de conception Iterator décrit-il ?
- Définissez un objet (itérateur) distinct qui encapsule l'accès et la traversée d'un objet agrégé.
- Les clients utilisent un itérateur pour accéder et parcourir un agrégat sans connaître sa représentation (structures de données).
📑 Implémentation
Iterator
class BookList implements Iterator
{
private $books = [];
private $index = 0;
public function addBook(string $book): self
{
$this->books[] = $book;
return $this;
}
public function rewind()
{
$this->index = 0;
}
public function current()
{
return $this->books[$this->index];
}
public function key()
{
return $this->index;
}
public function next()
{
++$this->index;
}
public function valid()
{
return array_key_exists($this->index, $this->books);
}
}
Utilisation
$bookList = (new BookList())
->add("Foo");
->add("Bar");
->add("Baz");
foreach($bookList as $book) {
var_dump($book);
}