Qu'est-ce que le modèle singleton php ? Explication détaillée de l'utilisation du mode singleton

伊谢尔伦
Libérer: 2023-03-12 13:44:02
original
3547 Les gens l'ont consulté

Cet article part du concept de modèle de conception et décrit le modèle singleton dans le modèle de conception PHP. Il s'agit de connaissances de base qui donnent aux débutants la possibilité de s'améliorer.

Cette série d'articles résume l'application des modèles de conception en PHP. Il s'agit du premier article sur le modèle singleton des modèles de création.

1. Introduction aux modèles de conception
Tout d'abord, apprenons à connaître Qu'est-ce qu'un modèle de conception :
Un modèle de conception est un ensemble de modèles utilisés à plusieurs reprises et faciles à utiliser. Un résumé de l'expérience de conception de code qui est compréhensible et fiable pour les autres.
Les modèles de conception ne sont pas un brevet de Java. Nous pouvons également bien utiliser 23 modèles de conception en PHP en utilisant des méthodes orientées objet.
Alors, quelle est la relation entre l'architecture, le framework et les modèles de conception dont nous parlons souvent ?
L'architecture est un ensemble de structures système et la solution globale du projet ; le cadre est un logiciel semi-fini qui peut être réutilisé et est un code de programme spécifique. L'architecture implique généralement le type de cadre à utiliser pour accélérer et optimiser la solution de certains problèmes, et les bons codes-cadres utilisent raisonnablement de nombreux modèles de conception.

2. Affiner plusieurs principes des modèles de conception :

Principe d'ouverture et de fermeture : Les modules doivent être ouverts pour expansion et fermés pour modification.
Principe de substitution Liskov : Si la classe parent est appelée, alors elle peut être exécutée si elle est remplacée par une sous-classe.
Principe d'inversion de dépendances : l'abstraction ne dépend pas des détails, une programmation orientée interface et les paramètres passés tentent de référencer des classes de haut niveau.
Principe d'isolation des interfaces : chaque interface n'est responsable que d'un seul rôle.
Principe de réutilisation composition/agrégation : Utiliser au maximum la composition/agrégation et ne pas abuser de l'héritage.

3. Quelles sont les fonctions des modèles de conception ?

Le modèle de conception peut résoudre le problème
Remplacez le code désordonné et formez un bon style de code
Le code est facile à lire et peut être facilement compris par les ingénieurs
Lors de l'ajout de nouvelles fonctions, il y a pas besoin de modifier l'interface et elle est extensible. Forte flexibilité
Bonne stabilité, généralement aucun problème inconnu ne se produira
Les modèles de conception ne peuvent pas résoudre :
Les modèles de conception sont des modèles utilisés pour organiser votre code, plutôt que des bibliothèques qui sont directement appelés ;
Les modèles de conception ne sont pas les plus efficaces, mais la lisibilité et la maintenabilité du code sont plus importantes
Ne recherchez pas et n'appliquez pas aveuglément les modèles de conception, réfléchissez davantage lors de la refactorisation ; Classification des modèles de conception

1, Modèles de création :

Modèle singleton, modèle d'usine (usine simple, méthode d'usine, usine abstraite), modèle de créateur, modèle de prototype.
2. Mode structurel :

Mode adaptateur
, mode pont, mode décoration, mode combinaison, mode apparence, mode poids mouche, mode proxy. 3. Modèles comportementaux : Modèle de méthode de modèle, modèle de commande,
Modèle d'itérateur
, modèle d'observateur, Modèle de médiateur, Modèle de mémo, mode interprète. , mode état, mode stratégie, mode chaîne de responsabilité, mode visiteur. 5. Modèle de conception créationnel 1. Modèle Singleton
Objectif : S'assurer qu'une classe n'a qu'une seule instance et fournir un point d'accès global pour y accéder.
Scénarios d'application : connexion à la base de données, fonctionnement du cache, stockage distribué.

Le code est le suivant :


Remarque : il y a un jugement if dans getInstance puis l'objet est généré en multi-. langages threadés, il y aura des problèmes de concurrence. Par exemple, il existe deux solutions en Java. Ajoutez le mot-clé synchronisé à la méthode pour la synchroniser, ou placez l'initialisation de _instanc à l'avance lorsque la variable membre de la classe est définie. Cependant, PHP ne prend pas en charge ces deux méthodes. Cependant, comme PHP ne prend pas en charge le multithreading, il n'est pas nécessaire de considérer ce problème.
     /**
     * 单例模式
     */
class DbConn
{
       private static $_instance = null;
       protected static $_counter = 0;
       protected $_db;
       //私有化构造函数,不允许外部创建实例
       private function construct()
       {
              self::$_counter += 1;
       }
       public function getInstance()
       {
              if (self::$_instance == null)
              {
                     self::$_instance = new DbConn();
              }
              return self::$_instance;
       }
       public function connect()
       {
              echo "connected: ".(self::$_counter)."n";
              return $this->_db;
       }
}
/*
 * 不使用单例模式时,删除构造函数的private后再测试,第二次调用构造函数后,_counter变成2
*/
// $conn = new DbConn();
// $conn->connect();
// $conn = new DbConn();
// $conn->connect();
//使用单例模式后不能直接new对象,必须调用getInstance获取
$conn = DbConn::getInstance();
$db = $conn->connect();
//第二次调用是同一个实例,_counter还是1
$conn = DbConn::getInstance();
$db = $conn->connect();
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal