Position actuelle: Accueil> Derniers articles> Analyse approfondie du mode Xiangyuan et de son application en PHP

Analyse approfondie du mode Xiangyuan et de son application en PHP

gitbox 2025-06-28

Quel est le mode de plaisir

Le mode encyclopédie est un modèle de conception structurelle conçu pour réduire l'utilisation de la mémoire et améliorer les performances en partageant des objets. Ce mode convient aux scènes avec un grand nombre d'objets similaires. En partageant l'état public des objets, il peut non seulement enregistrer la mémoire, mais également réduire les frais généraux causés par la création et la destruction d'objets.

Le principe du mode Xiangyuan

L'idée principale du mode encyclopédie est de diviser les objets en états internes (attributs intrinsèques) et états externes (attributs externes). L'état interne est inchangé et peut être partagé par plusieurs objets, tandis que l'état externe est variable et est généralement déterminé par l'environnement de l'objet.

En partageant l'état interne, le nombre d'objets peut être considérablement réduit, réduisant ainsi la consommation de mémoire. L'état externe est passé dynamiquement et modifié lorsqu'il est utilisé.

Scénarios d'application du mode Xiangyuan

Le modèle Xiangyuan a une forte valeur d'application dans les scénarios suivants:

Scénarios avec un grand nombre d'objets similaires

Lorsqu'il existe un grand nombre d'objets similaires dans le système, vous pouvez envisager d'utiliser le mode Encyclopedia pour partager l'état interne de ces objets, ce qui réduit considérablement la consommation de mémoire.

Les propriétés peuvent être divisées en état interne et à l'état externe

Lorsque les propriétés d'un objet peuvent être distinguées en états internes et externes, l'état interne peut être partagé et l'état externe est déterminé par l'environnement de l'objet.

Mise en œuvre du modèle Xiangyuan

Les étapes de base pour implémenter le mode de plaisir en PHP sont les suivantes:

Tout d'abord, créez une usine d'objets partagés pour gérer et fournir des objets d'objets partagés partagés.

 class FlyweightFactory {
    private $flyweights = [];
    public function getFlyweight($key) {
        if (!isset($this->flyweights[$key])) {
            $this->flyweights[$key] = new ConcreteFlyweight($key);
        }
        return $this->flyweights[$key];
    }
}

Ensuite, définissez l'interface avec l'objet Meta.

 interface Flyweight {
    public function operation();
}

Ensuite, créez un objet de plaisir spécifique et implémentez les états internes et externes partagés.

 class ConcreteFlyweight implements Flyweight {
    private $key;
    public function __construct($key) {
        $this->key = $key;
    }
    public function operation() {
        // Logique d'opération spécifique
    }
}

Avantages et inconvénients du modèle Xiangyuan

avantage

  • Enregistrement de la mémoire: réduit le nombre d'objets en partageant l'état interne, réduisant ainsi l'utilisation de la mémoire.
  • Améliorer les performances: améliorer les performances du système en réduisant les frais généraux de la création et de la destruction d'objets.

défaut

  • Les changements dans les états externes peuvent affecter les objets partagés: comme les états externes sont contrôlés par l'environnement, les changements dans les états externes peuvent affecter le comportement des objets partagés.
  • Limite de multiplexage des objets: lorsque l'état interne change fréquemment, le degré de partage sera réduit, réduisant ainsi les avantages du mode de plaisir.

Un exemple du mode de plaisir

En prenant le développement du jeu à titre d'exemple, supposons qu'un gestionnaire de personnage doit gérer un grand nombre d'objets de caractère. Dans un objet de caractère, certains attributs sont fixes, tels que les professions et les compétences, tandis que d'autres attributs changent, tels que la position et la santé.

Dans ce cas, la profession peut être partagée en tant qu'état interne, et la position et la santé peuvent être adoptées en tant qu'état externe.

 class Character {
    private $job;
    private $position;
    private $hp;
    public function __construct($job) {
        $this->job = $job;
    }
    public function setPosition($x, $y) {
        $this->position = "($x, $y)";
    }
    public function setHP($hp) {
        $this->hp = $hp;
    }
    public function display() {
        echo "Profession:{$this->job},Emplacement:{$this->position},Valeur de santé:{$this->hp}";
    }
}

Grâce à l'encyclopédie, nous pouvons réduire efficacement le nombre d'objets de rôle, améliorant ainsi l'utilisation de la mémoire et les performances du système.

 $factory = new FlyweightFactory();
$character1 = $factory->getFlyweight('guerrier');
$character1->setPosition(10, 20);
$character1->setHP(100);
$character1->display();
$character2 = $factory->getFlyweight('Mage');
$character2->setPosition(30, 40);
$character2->setHP(80);
$character2->display();

Résultat de sortie:

 Profession:guerrier,Emplacement:(10, 20),Valeur de santé:100
Profession:Mage,Emplacement:(30, 40),Valeur de santé:80

D'après les résultats de sortie ci-dessus, on peut voir que les états internes (comme la profession) de l'objet partagé sont les mêmes, tandis que les états externes (tels que la position et la santé) sont différents.