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 '<p>'; var_dump($obj_one,$obj_two);
Die laufenden Ergebnisse sind wie folgt:
20 object(instance)[1] public 'val' => int 20 object(instance)[1] public 'val' => int 20
Anwendung: Datenbankzugriffsobjekt (Datenbankzugriffsobjekt)
class mysqldb{ private $arr = array( 'port' => 3306, 'host' => 'localhost', 'username' => 'root', 'passward' => 'root', 'dbname' => 'instance', 'charset' => 'utf8' ); private $link; static $instance; private function clone(){} private function construct(){ $this->link = mysql_connect($this->arr['host'],$this->arr['username'],$this->arr['passward']) or die(mysql_error()); mysql_select_db($this->arr['dbname']) or die('db error'); mysql_set_charset($this->arr['charset']); } 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!