Maison  >  Article  >  développement back-end  >  Explication détaillée et exemples du mode singleton et du mode usine en PHP

Explication détaillée et exemples du mode singleton et du mode usine en PHP

墨辰丷
墨辰丷original
2018-05-18 11:26:371543parcourir

Cet article présente principalement en détail les informations pertinentes sur le mode PHP singleton et le mode usine. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

1. Le mode Singleton et appelé le modèle de responsabilité, c'est le cas. utilisé pour créer un point d'accès fonctionnel unique dans le programme. En termes simples, l'objet instancié est unique.
Tous les modèles singleton ont au moins les trois éléments communs suivants :

1 Ils doivent avoir un constructeur et doivent être marqués comme privés
2 Ils ont une classe de sauvegarde de variables membres statiques. l'instance
3. Ils ont une méthode statique publique pour accéder à cette instance

Une classe singleton ne peut pas être instanciée directement dans d'autres classes, mais ne peut être instanciée que par elle-même. Il ne crée pas de copie de l'instance, mais renvoie une référence à l'instance stockée en interne dans la classe singleton.

Instance de modèle singleton

<?php
class Single {
  private $name;//声明一个私有的实例变量
  private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
  
  }
 
  static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
  static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
   if(!self::$instance) self::$instance = new self();
   return self::$instance;
  }
 
  public function setname($n){ //给变量$name赋值
      $this->name = $n; 
   }
  public function getname(){ //取变量$name的值
      return $this->name; 
   }
 }
 
 
 $a = Single::getinstance();
 $b = Single::getinstance();
 $a->setname(&#39;hello world&#39;);
 $b->setname(&#39;good morning&#39;);
 echo $a->getname();//good morning
 echo $b->getname();//good morning
?>

2. Le modèle d'usine est une classe qui a certaines fonctions qui créent des objets pour vous . méthode afin que vous puissiez utiliser une classe d’usine pour créer des objets au lieu d’utiliser new directement.

Donc si vous souhaitez changer le type d'objet créé, il vous suffit de changer d'usine.

<?php
//工厂类(关于运算符的操作)
class factory{
 public static function dx($ope){
  switch($ope){
   case "+":
    return new plus();
    break;
   case "-":
    return new sub();
    break;
   case "%":
    return new rem();
    break;
  }
 }
} 
$ope = factory::dx("+");
$ope->a = 20;
$ope->b = 10;
echo $ope->opera();

Instance de modèle d'usine

class Factory {//创建一个基本的工厂类
  static public function fac($id){//创建一个返回对象实例的静态方法
   if(1 == $id) return new A();
   elseif(2==$id) return new B();
   elseif(3==$id) return new C();
   return new D();
  }
 }
 
 interface FetchName {//创建一个接口
  public function getname();//
 }
 
 class A implements FetchName{
  private $name = "AAAAA";
  public function getname(){ 
      return $this->name; 
    }
 }
 
 class C implements FetchName{
  private $name = "CCCCC";
  public function getname(){
      return $this->name; 
    }
 }
 class B implements FetchName{
  private $name = "BBBBB";
  public function getname(){ 
      return $this->name;
    }
 }
 
 class D implements FetchName{
  private $name = "DDDDD";
  public function getname(){ 
      return $this->name; 
    }
}
 
 
 $o = Factory::fac(6);//调用工厂类中的方法
 if($o instanceof FetchName){
 echo $o->getname();//DDDDD
 }
 
 $p=Factory::fac(3);
 echo $p->getname();//CCCCC
?>

Recommandations associées :

Modèle Singleton dans la conception de modèles php

Modèle d'adaptateur dans la conception de modèles php

Une brève analyse du mode php singleton, une brève analyse du tutoriel php mode_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!

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