Maison  >  Article  >  développement back-end  >  Modèles de conception PHP : explication détaillée du modèle singleton et du modèle d'usine

Modèles de conception PHP : explication détaillée du modèle singleton et du modèle d'usine

怪我咯
怪我咯original
2017-07-12 14:09:491241parcourir

1. Modèle Singleton

Le modèle Singleton est un modèle de conception logiciel couramment utilisé. Il ne contient qu’une seule classe spéciale appelée classe singleton dans sa structure de base. Le mode singleton peut garantir qu'il n'y a qu'une seule instance d'une classe dans le système et que l'instance est facilement accessible depuis le monde extérieur, facilitant ainsi le contrôle du nombre d'instances et économisant les ressources du système. Si vous souhaitez qu'un seul objet d'une certaine classe existe dans le système, le modèle singleton est la meilleure solution.

Avantages

1. Contrôle d'instance

Le modèle singleton empêche d'autres objets d'instancier des copies de leurs propres objets singleton, garantissant ainsi que tous les objets ont accès à une instance unique.

2. Flexibilité

Étant donné que la classe contrôle le processus d'instanciation, la classe peut modifier le processus d'instanciation de manière flexible.

Cet article présente principalement les connaissances pertinentes du mode cas unique et du mode usine en PHP. Il a une très bonne valeur de référence, jetons un oeil avec l'éditeur ci-dessous

Les raisons d'utiliser le mode singleton en php

J'utilise La plupart des opérations de PHP traitent diverses bases de données, notamment MySQL, Redis, Memcache et d'autres bases de données relationnelles, il y aura donc un grand nombre de bases de données connectées dans une application. Si vous n'utilisez pas le mode singleton, vous aurez besoin d'une nouvelle opération à chaque fois, mais chaque nouvelle consommera beaucoup de ressources mémoire et de ressources système, et chaque fois que vous ouvrez et fermez une connexion à la base de données, c'est un excellent test et test pour la base de données.

Nécessite une variable membre statique qui contient la seule instance de la classe (généralement $instance est une variable privée)

Le constructeur et la fonction clone doivent être déclarés privés, dans afin d'empêcher La nouvelle classe du programme externe perd ainsi le sens du mode singleton

doit fournir une méthode statique publique pour accéder à cette instance, renvoyant ainsi une référence à la seule instance

//设计模式
//单例模式 都是使用同一个对象
//class Ren
//{
// public $name;
// private static $dx; //存储对象
//
// private function construct()
// {
//
// }
//
// public static function DuiXiang()
// {
//  if(empty(self::$dx))
//  {
//   self:;$dx=new Ren();
//  }
//  return self::$dx;
// }
//}
//
//$r= Ren::DuiXiang();
//把构造函数变为私有
//做了一个方法来间接造对象
//在该方法里面加限制

2. Modèle d'usine

Le modèle d'usine est un modèle qui est spécifiquement chargé d'instancier un grand nombre de classes avec une interface commune (ou une classe parent abstraite commune) sans savoir à l'avance laquelle classe à instancier à chaque fois. Il définit une interface pour créer des objets et les sous-classes décident quelle classe instancier.

Avantages
La classe d'usine est la clé de l'ensemble du modèle. Elle contient le jugement logique nécessaire pour déterminer quelle classe spécifique d'objets doit être créée en fonction des informations fournies par le monde extérieur. classe d'usine, le monde extérieur peut se débarrasser de la situation embarrassante de la création directe d'objets de produits spécifiques et n'a besoin que d'être responsable de la « consommation » des objets. Peu importe la manière dont ces objets sont créés et organisés. Clarifier leurs responsabilités et droits respectifs est propice à l’optimisation de l’ensemble de l’architecture logicielle.
Inconvénients
Parce que la classe usine concentre la logique de création de toutes les instances, elle viole le principe d'allocation des responsabilités à haute cohésion et concentre toute la logique de création dans une seule classe usine, les classes qu'elle peut créer ne peuvent être considérées qu'à l'avance ; Oui, si vous devez ajouter une nouvelle classe, vous devez modifier la classe d'usine.
Lorsque le nombre de catégories de produits spécifiques dans le système continue d'augmenter, la classe d'usine devra peut-être créer différentes instances en fonction de différentes conditions. Ce jugement des conditions et le jugement de types de produits spécifiques sont étroitement liés, ce qui rend difficile d'éviter la propagation des fonctions du module et est très préjudiciable à la maintenance et à l'expansion du système
Ces lacunes ont été surmontées dans une certaine mesure dans la méthode d'usine ; modèle.
Scénarios d'utilisation
La classe factory est responsable de la création de moins d'objets que
Les clients ne connaissent que les paramètres transmis à la classe factory et ne se soucient pas de la façon de créer des objets (logique) ; ;
Parce que les usines simples peuvent facilement violer le principe d'attribution de responsabilités de cohésion élevée, elles ne sont donc généralement utilisées que dans des situations très simples.

Habituellement, le modèle de fabrique a une construction clé, qui est une méthode statique nommée Factory selon le principe général. Cependant, ce n'est qu'un principe. Cette méthode statique peut également être nommée arbitrairement. accepter les paramètres de toutes les données. Il doit s'agir de renvoyer un objet.

class YunSuan
{
 public $a;
 public $b;
 function Suan()
 {
  echo "对两个数进行运算";
 }
class gongchang
{ //功能 : 给一个参数,返回一个对象
 static function chanpin($name)
 {
  switch($name)
  {
   case "'+":
    return new jia();
    break;
   case "-";
    return new jian();
    break;
  }
 }
}
$a=gongchang::chanpin("+");

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