> 백엔드 개발 > PHP 튜토리얼 > PHP 디자인 패턴의 팩토리 패턴에 대한 자세한 설명

PHP 디자인 패턴의 팩토리 패턴에 대한 자세한 설명

怪我咯
풀어 주다: 2023-03-13 17:46:01
원래의
1216명이 탐색했습니다.

php 디자인 패턴 요약-팩토리 패턴

팩토리 패턴을 사용하는 목적이나 목표는 무엇인가요?

팩토리 패턴의 가장 큰 장점은 객체 생성에 있는데, 이는 객체 생성 과정을 캡슐화하여 언제든지 새로운 객체를 생성할 수 있다는 것입니다.
코드를 줄이고 복사하여 붙여넣으면 결합 관계가 무거워지고 코드의 다른 부분에 영향을 미칩니다.

일반인의 관점에서는 new를 사용하여 객체를 생성했지만 이제는 이 프로세스가 캡슐화되었습니다. 팩토리 모드가 사용되지 않는다고 가정하면, 클래스 a가 여러 곳에서 호출되고 코드는 다음과 같은 인스턴스를 생성합니다: new a(). 어느 날 클래스 a의 이름을 수정해야 한다는 뜻입니다. 많은 호출 코드를 수정해야 합니다.

팩토리 패턴의 장점은 객체를 생성한다는 점입니다.
팩토리 패턴의 장점은 객체를 생성한다는 점입니다. 새 객체를 생성하기 위한 팩토리(함수 또는 클래스 메서드)를 설정합니다. 그 작업은 객체 생성 프로세스를 캡슐화하는 것입니다.
객체 생성에는 새로운 형식이 사용되지 않습니다. 대신, 객체 인스턴스를 생성하는 방법을 정의하세요.

이 글에서는 주로 PHP 디자인 패턴 중 팩토리 모드와 싱글톤 모드를 소개하고, 팩토리 모드와 싱글톤 모드의 기능을 간략하게 소개하고, 팩토리 모드와 싱글톤 모드의 구현과 적용을 예제 형식으로 분석합니다.

자세한 내용은 다음과 같습니다.

공장 모드: 필요에 따라 해당 객체를 생성합니다.

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 &#39;<p>&#39;;
var_dump($obj_one,$obj_two);
로그인 후 복사

실행 결과는 다음과 같습니다.

20
object(instance)[1]
 public &#39;val&#39; => int 20
object(instance)[1]
 public &#39;val&#39; => int 20
로그인 후 복사

애플리케이션: 데이터베이스 액세스 개체)

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();
로그인 후 복사

위 내용은 PHP 디자인 패턴의 팩토리 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿