Maison  >  Article  >  développement back-end  >  Modèles de conception PHP : relation avec la programmation comportementale

Modèles de conception PHP : relation avec la programmation comportementale

WBOY
WBOYoriginal
2024-06-04 22:33:59989parcourir

Les modèles de conception PHP mettent en œuvre des principes de programmation comportementale pour créer du code reproductible et faiblement couplé grâce à des comportements bien définis. Les modèles spécifiques incluent : Modèle observateur : définit une relation abonnement-publication pour faciliter la surveillance des objets et la réponse aux événements. Mode stratégie : permet de basculer entre différents algorithmes et d'effectuer différentes opérations selon les besoins. Mode commande : encapsulez les requêtes dans des objets et exécutez-les de manière paramétrée.

Modèles de conception PHP : relation avec la programmation comportementale

Modèles de conception PHP : relation avec la programmation comportementale

La programmation comportementale crée du code répétable et faiblement couplé en définissant des comportements bien définis. PHP fournit de nombreux modèles de conception pour la programmation comportementale, explorons-les.

Modèle Observateur

Le modèle Observer définit une relation d'abonnement-publication dans laquelle un objet (sujet) peut émettre des notifications et d'autres objets (observateurs) peuvent les écouter.

interface Observer {
    public function update($subject);
}

class ConcreteObserver1 implements Observer {
    public function update($subject) {
        echo "ConcreteObserver1 received update from $subject\n";
    }
}

class ConcreteObserver2 implements Observer {
    public function update($subject) {
        echo "ConcreteObserver2 received update from $subject\n";
    }
}

class Subject {
    private $observers = [];

    public function attach(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function detach(Observer $observer) {
        $key = array_search($observer, $this->observers);
        if ($key !== false) {
            unset($this->observers[$key]);
        }
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }
}

// 实战案例
$subject = new Subject();
$observer1 = new ConcreteObserver1();
$observer2 = new ConcreteObserver2();
$subject->attach($observer1);
$subject->attach($observer2);
$subject->notify(); // 输出:"ConcreteObserver1 received update from Subject" 和 "ConcreteObserver2 received update from Subject"

Mode Stratégie

Le Mode Stratégie vous permet de basculer entre différents algorithmes selon vos besoins.

interface Strategy {
    public function doOperation($a, $b);
}

class ConcreteStrategyA implements Strategy {
    public function doOperation($a, $b) {
        return $a + $b;
    }
}

class ConcreteStrategyB implements Strategy {
    public function doOperation($a, $b) {
        return $a - $b;
    }
}

class Context {
    private $strategy;

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

    public function doOperation($a, $b) {
        return $this->strategy->doOperation($a, $b);
    }
}

// 实战案例
$context = new Context(new ConcreteStrategyA());
echo $context->doOperation(10, 5); // 输出:15

$context = new Context(new ConcreteStrategyB());
echo $context->doOperation(10, 5); // 输出:5

Command Pattern

Le modèle de commande encapsule les requêtes dans des objets, vous permettant de les exécuter de manière paramétrée.

interface Command {
    public function execute();
}

class ConcreteCommand implements Command {
    private $receiver;

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

    public function execute() {
        $this->receiver->action();
    }
}

class Receiver {
    public function action() {
        echo "Receiver action executed\n";
    }
}

class Invoker {
    private $commands = [];

    public function setCommand(Command $command) {
        $this->commands[] = $command;
    }

    public function invoke() {
        foreach ($this->commands as $command) {
            $command->execute();
        }
    }
}

// 实战案例
$receiver = new Receiver();
$command = new ConcreteCommand($receiver);
$invoker = new Invoker();
$invoker->setCommand($command);
$invoker->invoke(); // 输出:"Receiver action executed"

En utilisant des modèles de conception comportementale en PHP, vous pouvez créer un code réutilisable, maintenable et flexible.

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