>  기사  >  백엔드 개발  >  PHP 디자인 패턴 배우기 PHP는 빌더 패턴_php 기술을 구현합니다.

PHP 디자인 패턴 배우기 PHP는 빌더 패턴_php 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:03:49878검색

빌더 모드에서는 제품의 내부 표현과 제품 생산 과정을 분리하여 서로 다른 내부 표현을 가진 제품을 생성할 수 있습니다.
1. 빌더 모드 구조도

2. 빌더 모드의 주요 캐릭터
추상 빌더(Builder) 역할: 추상 인터페이스를 정의하여 제품의 각 구성요소 구성을 표준화합니다(즉, 특정 빌더의 메소드 구현을 표준화합니다). 지정된 메서드에는 구성 메서드와 결과 반환 메서드가 포함되어야 합니다
Concrete Builder(ConcreteBuilder) 역할: 추상 빌더 역할에서 정의한 메소드를 구현합니다. 특정 빌더는 비즈니스 로직과 밀접하게 관련되어 있으며, 애플리케이션은 결국 이 역할에 구현된 구축 메소드를 호출하여 비즈니스 로직에 따라 제품을 생성하게 되며 구축된 제품 인스턴스는 결과 반환을 통해 반환됩니다. 방법. 일반적으로 클라이언트나 추상 팩토리에 의해 외부에서 생성됩니다.
디렉터 역할: 이 역할의 역할은 특정 빌더 역할을 호출하여 제품을 만드는 것입니다. 감독은 상품 카테고리와 직접적인 관계가 없다. 상품 카테고리와 대화하는 구체적이고 추상적인 역할이다.
제품 역할: 강사의 지도 하에 제작자가 제작하는 복합물
디렉터 역할은 클라이언트의 비즈니스 로직을 이해하고 제품을 생성하라는 클라이언트의 요청을 제품 구성 요소에 대한 요청으로 분할한 다음 특정 제품 역할을 호출하여 구성 작업을 수행합니다. 이는 클라이언트를 콘크리트 건축업자와 분리합니다.
3. 빌더 모드의 장점과 단점
빌더 패턴의 장점: 빌더 패턴은 관련 "비즈니스" 로직에서 객체 구현을 분리할 수 있으므로 이벤트 로직을 변경하지 않고도 구현을 추가(또는 변경)하는 것이 매우 쉽습니다.
빌더 패턴의 단점: 빌더 인터페이스를 수정하면 모든 실행 클래스가 수정됩니다.
4. 빌더 모드의 사용 시나리오 및 효과
빌더 모드는 다음 상황에서 사용해야 합니다.
1. 생성해야 하는 제품 객체는 내부 구조가 복잡합니다.
2. 생성해야 하는 제품 객체의 속성은 서로 의존적이며 빌더 패턴에 따라 생성 순서가 강제될 수 있습니다.
3. 개체 생성 프로세스 중에 시스템의 일부 다른 개체가 사용되며 이러한 개체는 제품 개체 생성 프로세스 중에 얻기가 쉽지 않습니다.
빌더 모드를 사용하면 주로 다음과 같은 효과가 있습니다.
1. 빌더 모드를 사용하면 제품의 내부 외관을 독립적으로 변경할 수 있습니다. 빌더 패턴을 사용하면 클라이언트가 제품 내부 구성의 세부 사항을 알 필요가 없습니다.
2. 각 빌더는 상대적으로 독립적이며 다른 빌더와 아무런 관련이 없습니다.
3. 모델에 의해 만들어진 최종 제품은 제어하기가 더 쉽습니다.
5. 빌더 모드 및 기타 모드
추상 팩토리 모드: 추상 팩토리 모드에서는 팩토리 객체가 호출될 때마다 완전한 제품 객체가 반환되며 클라이언트는 이러한 제품을 더 크고 더 많은 형태로 조립하여 반환할 수 있습니다. 복잡한 제품일 수도 있고 아닐 수도 있습니다. 빌더 패턴이 다릅니다. 복잡한 제품을 하나씩 만들어가며, 이 제품의 조립 과정은 빌더 내부에서 이루어집니다. 둘의 차이는 조립공정이 있느냐 없느냐, 조립공정이 어디에서 일어나느냐이다. 이 두 가지 디자인 패턴은 구성 역할을 호출하여 클라이언트가 추상 팩토리 패턴에서 다른 팩터리 역할을 간접적으로 호출하는 데 함께 사용할 수 있습니다. 공장 모드는 다양한 제품군의 부품을 반환하고, 빌더 모드는 부품을 조립합니다.

전략 모드: 빌더 모드는 구조상 전략 모드와 매우 유사합니다. 사실 빌더 모드는 전략 모드의 특별한 경우입니다. 둘의 차이점은 서로 다른 의도에 있습니다. 빌더 패턴은 클라이언트에서 작동하여 새로운 객체를 조금씩 구축하는 반면, 전략 패턴의 목적은 알고리즘에 대한 추상 인터페이스를 제공하는 것입니다.

빌더 패턴 및 템플릿 메소드 패턴: 빌더 패턴이 퇴화되어 디렉터 역할을 상실한 후 템플릿 메소드 패턴으로 발전할 수 있습니다. 건설 역할).

빌더 패턴 및 구성 패턴: 구성 패턴은 객체 트리의 구조를 설명하는 반면, 빌더 패턴은 객체 트리의 생성 과정을 설명하는 데 사용할 수 있습니다.
위 4가지 사항은 "Java and Patterns"에서 발췌한 것입니다
6. 빌더 모드 PHP 예제

<&#63;php
/**
 * 产品
 * 此处仅以一个产品类中的字符串演示产品
 */
class Product {                          
 /**
 * 产品的组成部分集合
 */
 private $_parts;
 
 public function __construct() {
 $this->_parts = array();
 }
 
 public function add($part) {
 return array_push($this->_parts, $part);
 }
 
 public function show() {
 echo "the product include:";
 array_map('printf', $this->_parts);
 }
}
 
/**
 * 抽象建造者 
 */
abstract class Builder {
 
 /**
 * 产品零件构造方法1
 */
 public abstract function buildPart1();
 
 
 /**
 * 产品零件构造方法2
 */
 public abstract function buildPart2();
 
 
 /**
 * 产品返还方法
 */
 public abstract function getResult();
}
 
/**
 * 具体建造者
 */
class ConcreteBuilder extends Builder {
 
 private $_product;
 
 public function __construct() {
 $this->_product = new Product();
 }
 
 public function buildPart1() {
 $this->_product->add("Part1");
 }
 
 public function buildPart2() {
 $this->_product->add("Part2");
 }
 
 public function getResult() {
 return $this->_product;
 }
}
 
/**
 * 导演者
 */
class Director {
 
 public function __construct(Builder $builder) {
 $builder->buildPart1();
 $builder->buildPart2();
 }
}
 
 
 
class Client {
 
 /**
 * Main program.
 */
 public static function main() {
 $buidler = new ConcreteBuilder();
 $director = new Director($buidler);
 $product = $buidler->getResult();
 $product->show();
 }
 
}
 
Client::main();
&#63;>

위는 PHP를 사용하여 빌더 모드를 구현하는 코드입니다. 또한 빌더 모드에 대한 몇 가지 개념적 차이가 있어 모든 분들의 학습에 도움이 되기를 바랍니다.

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