Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung und Beispiele des Singleton-Modus und des Factory-Modus in PHP

Ausführliche Erklärung und Beispiele des Singleton-Modus und des Factory-Modus in PHP

墨辰丷
墨辰丷Original
2018-05-18 11:26:371572Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Informationen zum PHP-Singleton-Modus und zum Factory-Modus ausführlich vorgestellt. Interessierte Freunde können darauf verweisen.

1. Singleton-Modus und Verantwortungsmuster wird verwendet, um einen einzelnen funktionalen Zugangspunkt im Programm zu erstellen. Laienhaft ausgedrückt ist das instanziierte Objekt einzigartig.
Alle Singleton-Muster haben mindestens die folgenden drei gemeinsamen Elemente:

Sie müssen einen Konstruktor haben und als privat markiert sein
Sie haben eine Speicherklasse für statische Mitgliedsvariablen die Instanz
3. Sie verfügen über eine öffentliche statische Methode, um auf diese Instanz zuzugreifen

Eine Singleton-Klasse kann nicht direkt in anderen Klassen instanziiert werden, sondern nur von sich selbst instanziiert werden. Es erstellt keine Kopie der Instanz, sondern gibt einen Verweis auf die intern in der Singleton-Klasse gespeicherte Instanz zurück.

Singleton-Musterinstanz

<?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. Das Fabrikmuster ist eine Klasse, die bestimmte Methoden zum Erstellen von Objekten für Sie bereitstellt ermöglicht es Ihnen, Factory-Klassen zum Erstellen von Objekten zu verwenden, anstatt new direkt zu verwenden.

Wenn Sie also den Typ des erstellten Objekts ändern möchten, müssen Sie nur die Fabrik ändern.

<?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();

Factory-Musterinstanz

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
?>

Verwandte Empfehlungen:

Singleton-Muster des PHP-Musterdesigns

Adaptermuster des PHP-Musterdesigns

Eine kurze Analyse des PHP-Singleton-Modus, eine kurze Analyse des PHP-Modus_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung und Beispiele des Singleton-Modus und des Factory-Modus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn