Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen Factory-Modus und Singleton-Modus in PHP-Entwurfsmustern

Der Unterschied zwischen Factory-Modus und Singleton-Modus in PHP-Entwurfsmustern

一个新手
一个新手Original
2017-10-18 09:07:562705Durchsuche
//让该类在外界无法造对象
//让外界可以造一个对象,做一个静态方法返回对象
//在类里面通过让静态变量控制返回对象只能是一个。

Es gibt drei Hauptpunkte des Singleton-Musters:

  1. Erstens kann eine Klasse nur eine Instanz haben

  2. Das zweite ist, dass es diese Instanz selbst erstellen muss

  3. Das dritte ist, dass es diese Instanz selbst für das gesamte System bereitstellen muss.

Warum den PHP-Singleton-Modus verwenden

  1. 1. Die Anwendung von PHP erfolgt hauptsächlich in Datenbankanwendungen, in einer Anwendung Wenn Sie bei der objektorientierten Entwicklung den Singleton-Modus verwenden, können Sie eine große Anzahl neuer Vorgänge vermeiden, die Ressourcen verbrauchen, und Sie können auch Datenbankverbindungen reduzieren, sodass zu viele Verbindungen entstehen sind weniger wahrscheinlich.

  2. 2. Wenn eine Klasse benötigt wird, um bestimmte Konfigurationsinformationen im System global zu steuern, kann sie einfach im Singleton-Modus implementiert werden. Dies ist im FrontController-Teil von Zend zu sehen Rahmen.

  3. 3. In einer Seitenanforderung ist das Debuggen einfach, da der gesamte Code (z. B. die Datenbankoperationsklasse db) in einer Klasse konzentriert ist und wir Hooks in der Klasse setzen können Klasse, Ausgabeprotokolle, um var_dump und echo überall zu vermeiden.

class cat
{
    public $name;
    private function __construct()
    {

    }
    static $temp;
    static function new_ob()
    {
        if(empty(self::$temp)){
           self::$temp = new cat();
        }
        return self::$temp;
    }
    function  speak(){
        return "喵喵喵";
    }
}
//$mao = new cat();


//如果没有猫就造一个,然后等于新的xxx,如果有,直接等于。达到限制的目的。
//$mao;
//if (empty($mao)){
//    $mao = new cat();
//}
//    $xxx = $mao;

$mao = cat::new_ob();
$mao2 = cat::new_ob();
//给1猫改名字,2猫的名字输出为1猫改的名字。此为单例。
$mao->name = "py";

2. Einfaches Fabrikmuster

  • ①Abstrakte Basisklasse: Definieren Sie einige abstrakte Methoden in der Klasse. Wird zum Implementieren von

  • ②Von der abstrakten Basisklasse in der Unterklasse geerbt: Implementieren Sie die abstrakte Methode in der Basisklasse

  • ③Factory-Klasse: gewohnt Instanziieren Sie alle entsprechenden Unterklassen

abstract class jsq
{
    public $a;
    public $b;

    function yunsuan(){
    }
}
//此为拓展
class jiafa extends jsq
{
    function  yunsuan()
    {
        //parent::yunsuan(); // TODO: Change the autogenerated stub
        return $this ->a+$this->b;
    }
}
class  jianfa extends jsq
{
    function yuansuan(){
        return $this->a-$this->b;
    }
}
class factory
{
   static function create($x){
       switch ($x){
           case "+":
               return new jiafa();
               break;
           case "-":
               return new jianfa();
               break;
       }
   }
}
//$j1 = new jiafa();
//$j1->a = 1;
//$j1->b = 2;
//$j1->yunsuan();

//尽量避免实例化对象,采用静态方法获取。
$jf = factory::create("+");
$jf->a = 1;
$jf->b = 2;
echo $jf->yunsuan();

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Factory-Modus und Singleton-Modus in PHP-Entwurfsmustern. 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