Dans l'article précédent "Comprendre le modèle de façade en PHP dans un article", nous avons présenté le modèle de façade en PHP. Cet article vous amènera à comprendre le modèle de méthode de modèle dans le modèle de conception PHP.
Le modèle de méthode modèle est également l'un des modèles que nous utilisons souvent par inadvertance. Ce modèle est la meilleure interprétation de l'héritage. Lorsqu'il y a des actions répétées dans la sous-classe, elles sont extraites et placées dans la classe parent pour un traitement unifié. Il s'agit de l'explication la plus simple et la plus populaire du modèle de méthode modèle. Tout comme lorsque nous réalisons habituellement des projets, le processus de chaque projet est en fait le même, y compris les processus de recherche, de développement, de test, de déploiement et en ligne. Dans chaque projet, la mise en œuvre de ces processus ne sera pas exactement la même. Ce processus est comme une méthode modèle, nous permettant de développer à chaque fois selon ce processus.
Définition GoF : Définir le squelette d'un algorithme dans une opération, tout en reportant certaines étapes aux sous-classes. TemplateMethod permet aux sous-classes de redéfinir des étapes spécifiques d'un algorithme sans modifier la structure de l'algorithme.
Diagramme de classes GoF
Implémentation du code
abstract class AbstractClass { public function TemplateMethod() { $this->PrimitiveOperation1(); $this->PrimitiveOperation2(); } abstract public function PrimitiveOperation1(); abstract public function PrimitiveOperation2(); }
Définissez une classe abstraite avec une méthode modèle TemplateMethod(), dans laquelle nous appelons la méthode d'opération de l'algorithme. Ces méthodes abstraites d’algorithmes sont implémentées dans des sous-classes.
class ConcreteClassA extends AbstractClass { public function PrimitiveOperation1() { echo '具体类A实现方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具体类A实现方法2', PHP_EOL; } } class ConcreteClassB extends AbstractClass { public function PrimitiveOperation1() { echo '具体类B实现方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具体类B实现方法2', PHP_EOL; } }
Classes d'implémentation spécifiques, elles n'ont besoin que d'implémenter l'algorithme défini par la classe parent.
$c = new ConcreteClassA(); $c->TemplateMethod(); $c = new ConcreteClassB(); $c->TemplateMethod();
Dans l'appel du client, la sous-classe est instanciée, mais la méthode modèle de la classe parent héritée par la sous-classe est appelée. Des appels d'algorithmes unifiés peuvent être réalisés.
Code complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method.php
Example
Code source complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method-cache.php
Description<?php abstract class Cache { private $config; private $conn; public function __construct() { $this->init(); } public function init() { $this->GetConfig(); $this->OpenConnection(); $this->CheckConnection(); } abstract public function GetConfig(); abstract public function OpenConnection(); abstract public function CheckConnection(); } class MemcachedCache extends Cache { public function GetConfig() { echo '获取Memcached配置文件!', PHP_EOL; $this->config = 'memcached'; } public function OpenConnection() { echo '链接memcached!', PHP_EOL; $this->conn = 1; } public function CheckConnection() { if ($this->conn) { echo 'Memcached连接成功!', PHP_EOL; } else { echo 'Memcached连接失败,请检查配置项!', PHP_EOL; } } } class RedisCache extends Cache { public function GetConfig() { echo '获取Redis配置文件!', PHP_EOL; $this->config = 'redis'; } public function OpenConnection() { echo '链接redis!', PHP_EOL; $this->conn = 0; } public function CheckConnection() { if ($this->conn) { echo 'Redis连接成功!', PHP_EOL; } else { echo 'Redis连接失败,请检查配置项!', PHP_EOL; } } } $m = new MemcachedCache(); $r = new RedisCache();Copier après la connexion
- Nous avons implémenté une classe de cache si simple. Est-ce très similaire au code de nombreux frameworks ?
- Les sous-classes doivent uniquement définir leur propre implémentation, et le reste du code répétitif est laissé à la classe parente, elles doivent toutes implémenter elles-mêmes une méthode init()
- Bien sûr, d'autres implémentations. doit être ajouté, il vous suffit d'hériter de la classe parent Cache et de compléter votre propre implémentation. Les clients peuvent faire face à ces classes d'implémentation très facilement, car ils savent qu'ils n'ont besoin que d'appeler d'abord la méthode d'initialisation pour utiliser cette classe, peu importe. Quelle classe d'implémentation est la même
Adresse originale : https://juejin.cn/post/6844903989348139021
Auteur : Hardcore Project Manager
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!