Maison  >  Article  >  développement back-end  >  Compréhension approfondie du modèle mémo dans la programmation orientée objet PHP

Compréhension approfondie du modèle mémo dans la programmation orientée objet PHP

王林
王林original
2023-08-12 11:25:05920parcourir

Compréhension approfondie du modèle mémo dans la programmation orientée objet PHP

Compréhension approfondie du modèle Memento dans la programmation orientée objet PHP

1. Introduction

Le modèle Memento est un modèle de conception courant qui est largement utilisé dans la programmation orientée objet. Son objectif est de fournir un moyen de capturer l'état interne d'un objet et de pouvoir le restaurer ultérieurement à un état précédemment enregistré. Ceci est utile dans certaines situations, par exemple lorsque nous devons annuler une opération ou lorsque nous devons implémenter des fonctionnalités d'annulation et de rétablissement.

PHP est un langage de script largement utilisé, et le mode mémo est également très courant en PHP. Cet article fournira une compréhension approfondie du modèle de mémo dans la programmation orientée objet PHP et l'illustrera avec un exemple de code.

2. Exemples d'utilisation

Pour implémenter le mode mémo en PHP, vous devez créer trois classes : Originator (objet original), Memento (mémo) et Caretaker (gestionnaire). Ci-dessous, nous présenterons en détail le rôle de chaque classe. Classe

  1. Originator (objet original) : La classe

Originator est le rôle principal dans le modèle de mémo, elle contient l'état qui doit être enregistré et restauré. Cette classe contient généralement les méthodes suivantes :

  • getState() : récupère l'état de l'objet actuel ;
  • setState() : définit l'état de l'objet actuel ;
  • createMemento() : crée un objet mémo ; restaurerMemento() : De Restaurer l'état dans l'objet mémo.
  • L'exemple de code est le suivant :
class Originator
{
    private $state;

    public function getState()
    {
        return $this->state;
    }

    public function setState($state)
    {
        $this->state = $state;
    }

    public function createMemento()
    {
        return new Memento($this->state);
    }

    public function restoreMemento(Memento $memento)
    {
        $this->state = $memento->getState();
    }
}

Classe Memento (mémo) :
  1. La classe Memento est utilisée pour enregistrer l'état de l'objet Originator et fournit la méthode getState() pour obtenir l'état enregistré.

L'exemple de code est le suivant :

class Memento
{
    private $state;

    public function __construct($state)
    {
        $this->state = $state;
    }

    public function getState()
    {
        return $this->state;
    }
}

Classe Caretaker (gestionnaire) :
  1. La classe Caretaker est utilisée pour gérer les objets mémo et peut enregistrer et restaurer l'état si nécessaire.

L'exemple de code est le suivant :

class Caretaker
{
    private $mementos = [];

    public function addMemento(Memento $memento)
    {
        $this->mementos[] = $memento;
    }

    public function getMemento($index)
    {
        return $this->mementos[$index];
    }
}

3. Exemple d'utilisation du mode mémo

Ci-dessous, nous utilisons un exemple pratique pour illustrer comment utiliser le mode mémo.

Supposons que nous ayons une classe de courrier (Mail), qui contient deux attributs : le titre et le contenu de l'e-mail. Nous voulons pouvoir sauvegarder l'état d'un objet de messagerie à tout moment et pouvoir le restaurer ultérieurement à l'état précédemment enregistré. Dans ce cas, vous pouvez utiliser le mode mémo pour le résoudre.

L'exemple de code est le suivant :

class Mail
{
    private $subject;
    private $content;
    
    public function __construct($subject, $content)
    {
        $this->subject = $subject;
        $this->content = $content;
    }
    
    public function getSubject()
    {
        return $this->subject;
    }
    
    public function getContent()
    {
        return $this->content;
    }
    
    public function setSubject($subject)
    {
        $this->subject = $subject;
    }
    
    public function setContent($content)
    {
        $this->content = $content;
    }
    
    public function createMemento()
    {
        return new Memento($this->subject, $this->content);
    }
    
    public function restoreMemento(Memento $memento)
    {
        $this->subject = $memento->getSubject();
        $this->content = $memento->getContent();
    }
}

class Memento
{
    private $subject;
    private $content;
    
    public function __construct($subject, $content)
    {
        $this->subject = $subject;
        $this->content = $content;
    }
    
    public function getSubject()
    {
        return $this->subject;
    }
    
    public function getContent()
    {
        return $this->content;
    }
}

class Caretaker
{
    private $mementos = [];
    
    public function addMemento(Memento $memento)
    {
        $this->mementos[] = $memento;
    }
    
    public function getMemento($index)
    {
        return $this->mementos[$index];
    }
}

// 使用示例
$mail = new Mail("Hello", "This is a test mail");

$caretaker = new Caretaker();
$caretaker->addMemento($mail->createMemento());  // 保存状态

$mail->setSubject("New Subject");  // 修改邮件对象的状态

$mail->restoreMemento($caretaker->getMemento(0));  // 恢复到之前的状态

echo "Subject: " . $mail->getSubject();  // Output: Subject: Hello

Comme indiqué ci-dessus, nous avons créé une classe Mail, qui contient le titre et le contenu de l'e-mail. Utilisez ensuite la classe Caretaker pour enregistrer et gérer l'état de l'objet Mail. En appelant la méthode createMemento() de la classe Mail, nous pouvons enregistrer l'état actuel de l'objet Mail dans un objet mémo. L’appel de la méthode restaurerMemento() peut restaurer l’état précédent de l’objet mémo.

4. Résumé

Le modèle mémo est largement utilisé dans la programmation orientée objet PHP. En créant trois classes : Originator, Memento et Caretaker, nous pouvons facilement sauvegarder et restaurer l'état. Qu'il s'agisse d'opérations d'annulation, d'opérations de restauration ou de fonctions d'annulation et de rétablissement, le mode mémo peut constituer une bonne solution.

J'espère que cet article pourra aider les lecteurs à avoir une compréhension approfondie du modèle de mémo dans la programmation orientée objet PHP et à être en mesure d'utiliser pleinement ses avantages dans des projets réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn