>백엔드 개발 >PHP 튜토리얼 >고급 객체 지향 디자인 패턴: 빌더 패턴

고급 객체 지향 디자인 패턴: 빌더 패턴

巴扎黑
巴扎黑원래의
2017-05-20 15:04:491535검색

빌더 모드란 무엇인가요?

복잡한 객체의 구성과 표현을 분리하여 동일한 구성 프로세스가 다른 표현을 생성할 수 있도록 하는 디자인 패턴입니다.

디자인 시나리오:

이 클래스를 생성하려면 사용자의 이름, 나이, 취미 및 기타 정보를 생성해야 합니다. 사용자의 특정 정보 결과를 얻습니다.

UserBuilder 사용자 빌더 클래스를 만듭니다. 이 클래스는 UserInfo의 이름, 나이, 취미 및 기타 작업의 복잡한 생성을 캡슐화하여 사용자 클래스 생성 프로세스를 단순화합니다.

이것은 사용자입니다. class

class UserInfo
{    
          protected $_userName;    
          protected $_userAge;    
          protected $_userHobby;    
     
     public function setUserName($userName)
    {        
            $this->_userName = $userName;
    }    
    
    public function setUserAge($userAge)
    {        
            $this->_userAge = $userAge;
    }    
    
    public function setUserHobby($userHobby)
    {        
            $this->_userHobby = $userHobby;
    }    
    
    public function getPeopleInfo()
    {        
           echo  "<br>这个人的名字是:" . $this->_userName . "<br>年龄为:" . $this->_userAge . "<br>爱好:" . $this->_userHobby;
    }
}

이때 사용자 정보를 얻어야 합니다. 프로세스는 다음과 같습니다.

$modelUser = new UserInfo();
$modelUser->setUserName(&#39;松涛&#39;);
$modelUser->setUserAge(&#39;23&#39;);
$modelUser->setUserHobby(&#39;推理小说&#39;);
$modelUser->getPeopleInfo();

얻은 결과는

이름입니다. 이 사람의 이름은 : 송타오
나이 : 23
취미 : 추리소설

이때 유저 빌더 클래스를 생성하세요

class UserBuilder
{    
      protected $_obj;    

      public function __construct()
    {        
            $this->_obj = new UserInfo();
    }   
    
     public function builderPeople($userInfo)
    {       
            $this->_obj->setUserName($userInfo[&#39;userName&#39;]);
            $this->_obj->setUserAge($userInfo[&#39;userAge&#39;]); 
            $this->_obj->setUserHobby($userInfo[&#39;userHobby&#39;]);
    }    
    
     public function getBuliderPeopleInfo()
    {        
            $this->_obj->getPeopleInfo();
    }
}

이것은 복잡할 것입니다. 생성 프로세스는 builderPeople 메소드에 캡슐화되어 있습니다. 다음 단계는 객체를 생성하는 것입니다:

$userArr = array(    &#39;userName&#39; => &#39;松涛&#39;,
    &#39;userAge&#39; => &#39;23&#39;,
    &#39;userHobby&#39; => &#39;推理小说&#39;);
    $modelUserBuilder = new UserBuilder();
    $modelUserBuilder->builderPeople($userArr);
    $modelUserBuilder->getBuliderPeopleInfo();

출력 결과는:

사람 이름: Songtao
나이: 23
취미: 미스터리 소설

장점:

빌더 패턴은 객체 구현을 관련 "비즈니스" 로직과 분리할 수 있으므로 이벤트 로직을 변경하지 않고도 사용할 수 있습니다. 이벤트 로직을 사용하면 구현을 매우 쉽게 추가(또는 변경)할 수 있습니다.

단점:

빌더 인터페이스를 수정하면 모든 실행 클래스가 수정됩니다.

빌더 패턴은 다음과 같은 상황에서 사용해야 합니다.

1. 생성해야 하는 제품 객체의 내부 구조가 복잡합니다.
2. 생성해야 하는 제품 객체의 속성은 서로 다르며 빌더 모드에서는 생성 순서를 강제할 수 있습니다.
3. 객체 생성 과정에서는 제품 객체 생성 중에 쉽게 얻을 수 없는 시스템의 다른 객체가 사용됩니다.

위의 예를 바탕으로 빌더 모드의 효과를 얻을 수 있습니다.
1. 빌더 모드를 사용하면 제품의 내부 모습을 독립적으로 변경할 수 있습니다. 빌더 패턴을 사용하면 클라이언트가 제품 내부 구성의 세부 사항을 알 필요가 없습니다.
2. 각 빌더는 상대적으로 독립적이며 다른 빌더와 아무런 관련이 없습니다(독립 제어 로직).
3. 모드로 제작된 최종 제품은 제어하기가 더 쉽습니다.

빌더 모드와 팩토리 모드의 차이점:

빌더 모드와 팩토리 모드는 전반적으로 매우 유사하다는 것을 알 수 있습니다. 반면, 빌더 모드에는 팩토리 모드보다 "디렉터" 역할이 하나만 더 있습니다. 빌더 패턴의 클래스 다이어그램에서 Director 클래스를 최종적으로 호출되는 클라이언트로 간주하면 다이어그램의 나머지 부분은 간단한 팩토리 패턴으로 간주할 수 있습니다.

빌더 패턴은 팩토리 패턴에 비해 일반적으로 더 복잡한 객체를 만드는 데 사용됩니다. 객체 생성 과정이 더 복잡하기 때문에 객체 생성 과정을 분리하여 새로운 클래스인 Director 종류를 만듭니다. 즉, 팩토리 패턴은 전체 객체 생성 프로세스를 팩토리 클래스에 캡슐화하고 팩토리 클래스는 빌더 패턴에서 최종 제품을 클라이언트에 제공하지만 빌더 클래스는 일반적으로 제품 클래스의 각 구성 요소만 구성합니다. .구체적인 공사과정은 원장급에 인계됩니다. 디렉터 클래스는 특정 규칙에 따라 각 구성 요소를 제품으로 구성한 다음 조립된 제품을 클라이언트에 전달하는 역할을 담당합니다.

위 내용은 고급 객체 지향 디자인 패턴: 빌더 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.