Considérons deux classes, Hen et Egg avec ces deux règles :
* Lorsqu'une poule pond, elle crée un oeuf.
* Lorsqu'un oeuf éclot, une poule nait.
<?php
class Hen
{
public function lay()
{
return new Egg();
}
}
class Egg
{
public function hatch()
{
return new Hen();
}
}
On peut donc créer des petits enfants très simplement :
$hen = (new Hen())->lay()->hatch();
Ce design pattern est à ranger dans la catégorie des Constructors (ce n'est qu'un double FactoryMethod).