Éditer sur GitHub

State (État)

Problème

Nous avons des traitements dépendant le l'état d'un objet et souhaitons externaliser la logique correspondante.

Cas d'école

Nous avons une simulation de particules initialisées avec une vitesse initiale et passant par trois états successifs :

Nous ne voulons pas gérer cette logique dans une méthode update(elapsedTime) sur la classe Particule.

Solution

Nous pouvons nous inspirer du patron état comme suit avec une classe par état :

UML State Projectile

Nous aurons un code du style suivant pour la gestion du mouvement :

class MovingProjectile implements ProjectileState {

    constructor(
        private Projectile: projectile
    ){}

    update(double elapsedTime){
        // calcul du déplacement...
        // détection d'une éventuelle collision
        if ( collision != null ){
            projectile.setPosition(collision.getPosition()); 
            projectile.setSpeed(Vector.ZERO);
            // changement de l'état
            projectile.setState(new ExplodingState(projectile));
        }
    }
}

Liens utiles