Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Factory-Musters des PHP-Designmusters

Detaillierte Erläuterung des Factory-Musters des PHP-Designmusters

怪我咯
怪我咯Original
2017-07-12 14:07:111208Durchsuche

Zusammenfassung der PHP-Entwurfsmuster – Fabrikmuster

Was ist der Zweck oder das Ziel der Verwendung des Fabrikmusters?

Der größte Vorteil des Factory-Musters liegt in der Objekterstellung, nämlich der Kapselung des Objekterstellungsprozesses, sodass jederzeit ein neues Objekt generiert werden kann.
Reduzieren Sie den Code, kopieren Sie ihn und fügen Sie ihn ein. Die Kopplungsbeziehung ist stark und wirkt sich auf andere Teile des Codes aus.

Laienhaft ausgedrückt: In der Vergangenheit wurde zum Erstellen eines Objekts ein neues Objekt verwendet, aber jetzt ist dieser Prozess gekapselt.
Angenommen, der Factory-Modus wird nicht verwendet: Dann wird an vielen Stellen Klasse a aufgerufen und der Code erstellt eine Instanz wie diese: new a() Angenommen, eines Tages muss der Name der Klasse a geändert werden. Das bedeutet, dass viele Aufrufcodes geändert werden müssen.

Der Vorteil des Fabrikmusters liegt in der Erstellung von Objekten.
Der Vorteil des Factory-Musters liegt in der Erstellung von Objekten. Richten Sie eine Factory (eine Funktion oder eine Klassenmethode) ein, um neue Objekte zu erstellen. Ihre Aufgabe besteht darin, den Objekterstellungsprozess zu kapseln.
Bei der Erstellung von Objekten werden keine neuen Objekte verwendet. Definieren Sie stattdessen eine Methode zum Erstellen von Objektinstanzen.

In diesem Artikel werden hauptsächlich der Factory-Modus und der Singleton-Modus von PHP-Entwurfsmustern vorgestellt, die Funktionen des Factory-Modus und des Singleton-Modus kurz vorgestellt und die Implementierung und Implementierung des Factory-Modus und des Singleton-Modus anhand von Anwendungsbeispielen analysiert , Freunde in Not können darauf verweisen, Die Details sind wie folgt:

Werksmodus: Erstellen Sie entsprechende Objekte als Reaktion auf Bedürfnisse

class factory{
  function construct($name){
    if(file_exists('./'.$name.'.class.php')){
      return new $name;
    }else{
      die('not exist');
    }
  }
}

Einzelfallmodus: Nur ​​eine Instanz eines Objekts erstellen , es dürfen keine weiteren Instanzen erstellt werden, wodurch Ressourcen (z. B. Datenbank) gespart werden Verbindungen)

class instance{
  public $val = 10;
  private static $instance ;
  private function construct(){}
  private function clone(){}
  //设置为静态方法才可被类调用
  public static function getInstance(){
    /*if(!isset(self::$instance)){
      self::$instance = new self;
    }*/
    if(!isset(instance::$instance)){
      instance::$instance = new self;
    }
    return instance::$instance;
  }
}
$obj_one = instance::getInstance();
$obj_one->val = 20;
//clone可以调用clone()克隆即new出一个新的的对象
//$obj_two = clone $obj_one;
$obj_two = instance::getInstance();
echo $obj_two->val;
echo &#39;<p>&#39;;
var_dump($obj_one,$obj_two);

Die laufenden Ergebnisse sind wie folgt:

20
object(instance)[1]
 public &#39;val&#39; => int 20
object(instance)[1]
 public &#39;val&#39; => int 20

Anwendung: Datenbankzugriffsobjekt (Datenbankzugriffsobjekt)

class mysqldb{
  private $arr = array(
    &#39;port&#39; => 3306,
    &#39;host&#39; => &#39;localhost&#39;,
    &#39;username&#39; => &#39;root&#39;,
    &#39;passward&#39; => &#39;root&#39;,
    &#39;dbname&#39; => &#39;instance&#39;,
    &#39;charset&#39; => &#39;utf8&#39;
     );
  private $link;
  static $instance;
  private function clone(){}
  private function construct(){
    $this->link = mysql_connect($this->arr[&#39;host&#39;],$this->arr[&#39;username&#39;],$this->arr[&#39;passward&#39;]) or die(mysql_error());
    mysql_select_db($this->arr[&#39;dbname&#39;]) or die(&#39;db error&#39;);
    mysql_set_charset($this->arr[&#39;charset&#39;]);
  }
  static public function getInsance(){
    if(!isset(mysqldb::$instance)){
      mysqldb::$instance = new self;
    }
    return mysqldb::$instance;
  }
  public function query($sql){
    if($res = mysql_query($sql)){
      return $res;
    }return false;
  }
  //fetch one
  public function get_one($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_row($res)){
      return $result[0];
    }
  }
  //fetch row
  public function get_row($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_assoc($res)){
      return $result;
    }
    return false;
  }
  //fetch all
  public function get_all($sql){
    $res = $this->query($sql);
    $arr = array();
    while($result = mysql_fetch_assoc($res)){
      $arr[] = $result;
    }
    return $arr;
  }
}
$mysql = mysqldb::getInsance();

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Factory-Musters des PHP-Designmusters. 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