이전 기사 "PHP의 중간 패턴에 대한 간략한 이야기"에서 PHP의 중간 패턴을 소개했습니다. 이 기사에서는 PHP 디자인 패턴의 빌더 패턴을 이해하도록 안내합니다.
빌더 모드는 생성기 모드라고도 합니다. 빌더라는 단어의 원래 의미에는 빌더, 개발자, 제작자라는 의미가 포함되어 있습니다. 분명히 이 모드는 객체를 생성하는 데 사용되는 또 다른 생성 모드입니다. 그렇다면 그 특징은 무엇입니까? 건축학적 관점에서 볼 때, 집을 짓는 것은 즉시 지을 수 있는 것이 아니라, 벽돌을 하나씩 쌓아가는 것입니다. 집은 벽돌과 기와뿐만 아니라 각종 파이프, 각종 전선 등으로 구성되어 있고, 그 여러 부분이 모여 집을 이룬다. 빌더 패턴은 다양한 구성 요소로 사물(집)을 구성하는 매우 생생한 과정이라고 할 수 있습니다.
GoF 정의: 복잡한 객체의 구성을 표현과 분리하여 동일한 구성 프로세스가 다른 표현을 생성할 수 있도록
GoF 클래스 다이어그램
code는
class Product { private $parts = []; public function Add(String $part): void { $this->parts[] = $part; } public function Show(): void { echo PHP_EOL . '产品创建 ----', PHP_EOL; foreach ($this->parts as $part) { echo $part, PHP_EOL; } } }
제품 클래스를 구현한 것입니다. 우리가 짓고 싶은 집이라고 생각하시면 됩니다. 현재 집에는 아직 콘텐츠가 없으므로 콘텐츠를 추가해야 합니다.
interface Builder { public function BuildPartA(): void; public function BuildPartB(): void; public function GetResult(): Product; } class ConcreteBuilder1 implements Builder { private $product; public function __construct() { $this->product = new Product(); } public function BuildPartA(): void { $this->product->Add('部件A'); } public function BuildPartB(): void { $this->product->Add('部件B'); } public function GetResult(): Product { return $this->product; } } class ConcreteBuilder2 implements Builder { private $product; public function __construct() { $this->product = new Product(); } public function BuildPartA(): void { $this->product->Add('部件X'); } public function BuildPartB(): void { $this->product->Add('部件Y'); } public function GetResult(): Product { return $this->product; } }
Builder 추상화 및 구현. 개발자마다 항상 서로 다른 브랜드의 재료를 사용합니다. 여기서는 두 명의 개발자가 있지만 그들의 목적은 동일합니다. 집(제품)을 짓는 것입니다.
class Director { public function Construct(Builder $builder) { $builder->BuildPartA(); $builder->BuildPartB(); } }
Constructor, 제작을 위해 빌더를 호출하는 데 사용됩니다. 맞습니다. 우리 엔지니어링 팀입니다. 자재를 선택하고 제작합니다. 동일한 엔지니어링 팀이 서로 다른 주문을 받을 수 있지만 그들이 짓는 것은 모두 주택입니다. 이 집의 재료와 외관만 다를 뿐, 전반적인 장인의 기술은 여전히 동일합니다.
$director = new Director(); $b1 = new ConcreteBuilder1(); $b2 = new ConcreteBuilder2(); $director->Construct($b1); $p1 = $b1->getResult(); $p1->Show(); $director->Construct($b2); $p2 = $b2->getResult(); $p2->Show();
마지막으로 우리의 구현을 살펴보겠습니다. 아주 간단하죠? 엔지니어링 팀을 준비하고, 다양한 빌더를 준비한 후, 제작을 위해 엔지니어링 팀에 넘겨주기만 하면 됩니다! !
전체 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder.php
Example앞서 언급했듯이 대화 상자 대화 상자가 많이 있습니다. Android에서는 모두 빌더 모델을 사용하여 구현됩니다. 휴대폰 공장의 소유자로서 맞춤형 Android 시스템도 매우 중요한 부분입니다. X Mi와 마찬가지로 우리도 MIUI로 시작하여 소프트웨어 시장에서 먼저 승리하여 모두가 이 시스템이 사용하기 매우 쉽다고 느끼게 한 후 휴대폰 개발을 시작했습니다. 이는 소프트웨어와 하드웨어가 실제로 현대 휴대폰의 가장 중요한 두 가지 구성 요소이며, 어느 것도 그것 없이는 살아남을 수 없음을 보여줍니다. 이번에는 빌더 모드를 사용해 간단하게 다이얼로그 컴포넌트 세트를 구현해보겠습니다!Dialog 클래스 다이어그램
전체 소스 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder-dialog.php
<?php class Dialog { private $attributes = []; private $buttons = []; private $title = ''; private $content = ''; public function AddAttributes($attr) { $this->attributes[] = $attr; } public function AddButtons($button) { $this->buttons[] = $button; } public function SetTitle($title) { $this->title = $title; } public function SetContent($content) { $this->content = $content; } public function ShowDialog(){ echo PHP_EOL, '显示提示框 === ', PHP_EOL; echo '标题:' . $this->title, PHP_EOL; echo '内容:' . $this->content, PHP_EOL; echo '样式:' . implode(',', $this->attributes), PHP_EOL; echo '按扭:' . implode(',', $this->buttons), PHP_EOL; } } interface Builder { public function BuildAttribute($attr); public function BuildButton($button); public function BuildTitle($title); public function BuildContent($content); public function GetDialog(); } class DialogBuilder implements Builder{ private $dialog; public function __construct(){ $this->dialog = new Dialog(); } public function BuildAttribute($attr){ $this->dialog->AddAttributes($attr); } public function BuildButton($button){ $this->dialog->AddButtons($button); } public function BuildTitle($title){ $this->dialog->SetTitle($title); } public function BuildContent($content){ $this->dialog->SetContent($content); } public function GetDialog(){ return $this->dialog; } } class DialogDirector { public function Construct($title, $content){ $builder = new DialogBuilder(); $builder->BuildAttribute('置于顶层'); $builder->BuildAttribute('居中显示'); $builder->BuildButton('确认'); $builder->BuildButton('取消'); $builder->BuildTitle($title); $builder->BuildContent($content); return $builder; } } class ModalDialogDirector { public function Construct($title, $content){ $builder = new DialogBuilder(); $builder->BuildAttribute('置于顶层'); $builder->BuildAttribute('居中显示'); $builder->BuildAttribute('背景庶照'); $builder->BuildAttribute('外部无法点击'); $builder->BuildButton('确认'); $builder->BuildButton('取消'); $builder->BuildTitle($title); $builder->BuildContent($content); return $builder; } } $d1 = new DialogDirector(); $d1->Construct('窗口1', '确认要执行操作A吗?')->GetDialog()->ShowDialog(); $d2 = new ModalDialogDirector(); $d2->Construct('窗口2', '确认要执行操作B吗?')->GetDialog()->ShowDialog();
지침
원본 주소: https: / /juejin.cn/post/6844903981836320781
저자: 하드코어 프로젝트 관리자
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP의 빌더 패턴에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!