PHP 에서 자주 사용 하 는 세 가지 디자인 모델 집합

7769 단어 PHP디자인 모드
이 글 은 PHP 에서 자주 사용 하 는 세 가지 디자인 모델 의 필기 와 정 리 를 배 우 는 것 입 니 다.어떤 언어 로 무엇 을 개발 하 든 디자인 모델 에 거의 사 용 됩 니 다.우 리 는 왜 디자인 모델 이 필요 합 니까?그것 의 탄생 은 우리 개발 자 들 에 게 어떤 역할 과 의미 가 있 습 니까?
iOS 개발 을 하 시 는 분 들 도 디자인 에 익숙 하 실 거 라 고 믿 죠?예 를 들 어 단일 디자인 모델,공장 디자인 모델,관찰자 모델,MVC 구조 디자인 모델 등 이다.
그 다음 에 우 리 는 PHP 에서 가장 자주 사용 하 는 세 가지 디자인 모델 을 배 웁 니 다.단일 디자인 모델,공장 디자인 모델 과 관찰자 디자인 모델 입 니 다.
단일 디자인 모드
단일 모드 란 프로그램 에서 가장 많은 인 스 턴 스 만 존재 하 는 것 입 니 다.만 들 면 메모리 에 계속 존재 합 니 다!
단일 디자인 모델 은 데이터 베이스 류 디자인 에 자주 사용 되 고 단일 모델 로 데이터 베 이 스 를 한 번 만 연결 하여 여러 개의 데이터 베이스 연결 을 방지 합 니 다.
하나의 사례 류 는 다음 과 같은 특징 을 가 져 야 한다.
단일 클래스 는 직접 실례 화 되 어 만 들 수 없고 클래스 자체 에 의 해 실례 화 될 수 있 습 니 다.따라서 이러한 제한 효 과 를 얻 으 려 면 구조 함 수 는 private 로 표시 하여 클래스 가 예화 되 는 것 을 방지 해 야 한다.
클래스 인 스 턴 스 를 저장 하고 인 스 턴 스 에 접근 할 수 있 는 공개 정적 인 방법 을 공개 하기 위해 서 는 개인 정적 인 구성원 변수 가 필요 합 니 다.
PHP 에 서 는 다른 사람 이 단일 인 스 턴 스 를 복제 하 는 것 을 방지 하기 위해 빈 개인__clone()방법 을 제공 합 니 다.
단일 모드 의 예:

 
<?php
 
/**
* Singleton of Database
*/
class Database
{
  // We need a static private variable to store a Database instance.
  privatestatic $instance;
 
  // Mark as private to prevent it from being instanced.
  privatefunction__construct()
  {
    // Do nothing.
  }
 
  privatefunction__clone() 
  {
    // Do nothing.
  }
 
  publicstatic functiongetInstance() 
  {
    if (!(self::$instanceinstanceofself)) {
      self::$instance = newself();
    }
 
    returnself::$instance;
  }
}
 
$a =Database::getInstance();
$b =Database::getInstance();
 
// true
var_dump($a === $b);
 
공장 설계 모델
공장 설계 모델 은 입력 매개 변수 가 다 르 거나 응용 프로그램 설정 에 따라 실례 화 되 고 대응 하 는 클래스 를 되 돌려 주 는 실례 를 만 드 는 데 자주 사용 된다.
예 를 들 어 사각형,원 이 모두 같은 방법 이 있다 고 가정 하면 우 리 는 기본 클래스 가 제공 하 는 API 로 인 스 턴 스 를 만 들 때 매개 변 수 를 통 해 해당 하 는 인 스 턴 스 를 자동 으로 만 듭 니 다.그들 은 모두 둘레 와 면적 을 얻 는 기능 을 가지 고 있 습 니 다.

 
<?php
 
interfaceInterfaceShape 
{
 functiongetArea();
 functiongetCircumference();
}
 
/**
*   
*/
class Rectangle implementsInterfaceShape
{
  private $width;
  private $height;
  
  publicfunction__construct($width, $height)
  {
    $this->width = $width;
    $this->height = $height;
  }
 
  publicfunctiongetArea() 
  {
    return $this->width* $this->height;
  }
 
  publicfunctiongetCircumference()
  {
    return 2 * $this->width + 2 * $this->height;
  }
}
 
/**
*   
*/
class Circle implementsInterfaceShape
{
  private $radius;
 
  function__construct($radius)
  {
    $this->radius = $radius;
  }
 
 
  publicfunctiongetArea() 
  {
    return M_PI * pow($this->radius, 2);
  }
 
  publicfunctiongetCircumference()
  {
    return 2 * M_PI * $this->radius;
  }
}
 
/**
*      
*/
class FactoryShape 
{ 
  publicstatic functioncreate()
  {
    switch (func_num_args()) {
      case1:
      return newCircle(func_get_arg(0));
      case2:
      return newRectangle(func_get_arg(0), func_get_arg(1));
      default:
        # code...
        break;
    }
  } 
}
 
$rect =FactoryShape::create(5, 5);
// object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) }
var_dump($rect);
echo "<br>";
 
// object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) }
$circle =FactoryShape::create(4);
var_dump($circle);
 
관찰자 디자인 모드
관찰자 모델 은 흔히 볼 수 있 는 디자인 모델 로 적당 하 게 사용 하면 프로그램 에 큰 편 의 를 가 져 다 주 고 잘못 사용 하면 나중에 사람들 에 게 유지 하기 어 려 운 생각 을 줄 수 있다.
관찰자 모드 가 무엇 입 니까?한 대상 은 제공 방법 을 통 해 다른 대상 인 관찰자 가 자신 을 등록 할 수 있 도록 허용 한다).관찰 가능 한 대상 이 바 뀌 면 등 록 된 관찰자 에 게 메 시 지 를 보 냅 니 다.이 관찰자 들 이 이 정 보 를 사용 하여 수행 하 는 조작 은 관찰 가능 한 대상 과 무관 하 다.결 과 는 대상 이 서로 대화 할 수 있 기 때문에 원인 을 이해 할 필요 가 없다.관찰자 모델 은 일종 의 사건 시스템 으로 이 모델 은 특정한 유형 이 다른 유형의 상 태 를 관찰 할 수 있 음 을 의미한다.관찰 되 는 유형 상태 가 바 뀌 었 을 때 관찰 류 는 통 지 를 받 고 해당 하 는 동작 을 할 수 있다.관찰자 모드 는 구성 요소 간 의 긴밀 한 결합 을 피 할 수 있 도록 제공 합 니 다.아래 의 예 를 보면 너 는 곧 알 게 될 것 이다!

 
<?php
 
/*
     
*/
interfaceInterfaceObserver
{
  functiononListen($sender, $args);
  functiongetObserverName();
}
 
//        
interfaceInterfaceObservable
{
  functionaddObserver($observer);
  functionremoveObserver($observer_name);
}
 
//       
abstractclass Observer implementsInterfaceObserver
{
  protected $observer_name;
 
  functiongetObserverName() 
  {
    return $this->observer_name;
  }
 
  functiononListen($sender, $args)
  {
 
  }
}
 
//      
abstractclass Observable implementsInterfaceObservable 
{
  protected $observers = array();
 
  publicfunctionaddObserver($observer) 
  {
    if ($observerinstanceofInterfaceObserver) 
    {
      $this->observers[] = $observer;
    }
  }
 
  publicfunctionremoveObserver($observer_name) 
  {
    foreach ($this->observersas $index => $observer) 
    {
      if ($observer->getObserverName() === $observer_name) 
      {
        array_splice($this->observers, $index, 1);
        return;
      }
    }
  }
}
 
//            
class A extendsObservable 
{
  publicfunctionaddListener($listener) 
  {
    foreach ($this->observersas $observer) 
    {
      $observer->onListen($this, $listener);
    }
  }
}
 
//         
class B extendsObserver 
{
  protected $observer_name = 'B';
 
  publicfunctiononListen($sender, $args) 
  {
    var_dump($sender);
    echo "<br>";
    var_dump($args);
    echo "<br>";
  }
}
 
//           
class C extendsObserver 
{
  protected $observer_name = 'C';
 
  publicfunctiononListen($sender, $args) 
  {
    var_dump($sender);
    echo "<br>";
    var_dump($args);
    echo "<br>";
  }
}
 
$a = new A();
//      
$a->addObserver(new B());
$a->addObserver(new C());
 
//           
$a->addListener('D');
 
//      
$a->removeObserver('B');
 
//      :
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
 
작은 매듭
PHP 의 세계 에 처음 들 어 왔 습 니 다.지금 은 이러한 기본 적 인 디자인 모델 만 알 고 있 습 니 다.천천히 배 워 서 응용 하 세 요!만약 글 에 잘못된 점 이 있다 면 댓 글 에서 지적 해 주 십시오.저 는 명확 한 후에 글 내용 을 수정 할 것 입 니 다!

좋은 웹페이지 즐겨찾기