PHP 디자인 패턴 빌더 패턴에 대한 자세한 설명

*文
풀어 주다: 2023-03-19 09:58:01
원래의
2297명이 탐색했습니다.

이 글에서는 주로 PHP 디자인 모드 중 빌더 모드를 소개합니다. PHP를 사용하여 빌더 모드를 구현하면 관심 있는 친구들이 참고할 수 있습니다. 그것이 모두에게 도움이 되기를 바랍니다.

빌더 모드에서는 제품의 내부 표현과 제품 생산 과정을 분리하여 다양한 내부 표현을 가진 제품을 생성할 수 있습니다.
1. 빌더 패턴 구조 다이어그램

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

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

빌더 패턴 및 템플릿 메소드 패턴: 빌더 패턴이 퇴화되어 디렉터 역할을 잃으면 템플릿 메소드 패턴으로 발전할 수 있습니다(즉, 구축 프로세스의 알고리즘 구현을 구축 역할에 배치).

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

<?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(&#39;printf&#39;, $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();
?>
로그인 후 복사

관련 권장 사항:

PHP 디자인 패턴의 어댑터 패턴에 대한 자세한 설명

PHP 디자인 패턴의 반복자 패턴에 대한 자세한 설명

PHP 디자인 패턴의 데코레이터 패턴에 대한 자세한 설명

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

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