php 디자인 패턴 요약-팩토리 패턴
팩토리 패턴을 사용하는 목적이나 목표는 무엇인가요?
팩토리 패턴의 가장 큰 장점은 객체 생성에 있는데, 이는 객체 생성 과정을 캡슐화하여 언제든지 새로운 객체를 생성할 수 있다는 것입니다.
코드를 줄이고 복사하여 붙여넣으면 결합 관계가 무거워지고 코드의 다른 부분에 영향을 미칩니다.
일반인의 관점에서는 new를 사용하여 객체를 생성했지만 이제는 이 프로세스가 캡슐화되었습니다. 팩토리 모드가 사용되지 않는다고 가정하면, 클래스 a가 여러 곳에서 호출되고 코드는 다음과 같은 인스턴스를 생성합니다: new a(). 어느 날 클래스 a의 이름을 수정해야 한다는 뜻입니다. 많은 호출 코드를 수정해야 합니다.
팩토리 패턴의 장점은 객체를 생성한다는 점입니다.
팩토리 패턴의 장점은 객체를 생성한다는 점입니다. 새 객체를 생성하기 위한 팩토리(함수 또는 클래스 메서드)를 설정합니다. 그 작업은 객체 생성 프로세스를 캡슐화하는 것입니다.
객체 생성에는 새로운 형식이 사용되지 않습니다. 대신, 객체 인스턴스를 생성하는 방법을 정의하세요.
자세한 내용은 다음과 같습니다.
공장 모드: 필요에 따라 해당 객체를 생성합니다.
class factory{ function construct($name){ if(file_exists('./'.$name.'.class.php')){ return new $name; }else{ die('not exist'); } } }
단일 케이스 모드: 오직 객체의 인스턴스 생성, 그리고 더 이상 인스턴스 생성이 허용되지 않습니다. 리소스 저장(예: 데이터베이스 연결)
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);
20 object(instance)[1] public 'val' => int 20 object(instance)[1] public 'val' => int 20
애플리케이션: 데이터베이스 액세스 개체)
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();
위 내용은 PHP 디자인 패턴의 팩토리 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!