Dalam artikel sebelumnya "Perbincangan ringkas tentang corak perantara dalam PHP " kami memperkenalkan corak perantara dalam PHP Artikel ini akan membawa anda memahami corak pembina dalam corak reka bentuk PHP.
Mod pembina juga boleh dipanggil mod penjana Maksud asal perkataan pembina merangkumi makna pembina, pembangun dan pencipta. Jelas sekali, mod ini ialah mod penciptaan lain, digunakan untuk mencipta objek. Jadi apakah ciri-cirinya? Dari sudut seni bina, membina rumah bukanlah sesuatu yang boleh dibina serta-merta, tetapi dibina bata demi bata. Sebuah rumah bukan sahaja mempunyai batu bata dan jubin, tetapi juga pelbagai paip, pelbagai wayar, dan lain-lain, dan pelbagai bahagiannya bersama-sama membentuk sebuah rumah. Boleh dikatakan bahawa corak pembina adalah proses yang sangat jelas untuk menyusun objek (rumah) daripada pelbagai komponen.
Definasi GoF: Asingkan pembinaan objek kompleks daripada perwakilannya, supaya proses pembinaan yang sama boleh mencipta perwakilan yang berbeza
Rajah kelas GoF
Pelaksanaan kod
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; } } }
Kelas produk, anda boleh Fikirkan daripadanya seperti rumah yang ingin kami bina. Rumah pada ketika ini belum mempunyai apa-apa kandungan lagi, kita perlu menambahnya.
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; } }
Abstraksi pembina dan pelaksanaannya. Pemaju yang berbeza akan sentiasa menggunakan bahan jenama yang berbeza Di sini kita mempunyai dua pemaju yang berbeza, tetapi tujuan mereka adalah sama, untuk membina rumah (Produk).
class Director { public function Construct(Builder $builder) { $builder->BuildPartA(); $builder->BuildPartB(); } }
Pembina, digunakan untuk memanggil pembina untuk pengeluaran. Betul, itu pasukan kejuruteraan kami. Ia memilih bahan dan membina. Pasukan kejuruteraan yang sama boleh menerima pesanan yang berbeza, tetapi semua yang mereka bina hanyalah rumah. Cuma bahan dan rupa rumah ini berbeza, tetapi ketukangan umum masih sama.
$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();
Akhir sekali, mari kita lihat pelaksanaan kami Adakah ia sangat mudah hanya menyediakan pasukan kejuruteraan, menyediakan pembina yang berbeza, dan kemudian menyerahkannya kepada pasukan kejuruteraan untuk pengeluaran! !
Kod penuh: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder.php
ContohSeperti yang dinyatakan sebelum ini, banyak kotak dialog dalam Android dilaksanakan menggunakan mod pembina Sebagai pemilik kilang telefon mudah alih, sistem Android tersuai juga merupakan bahagian yang sangat penting. Sama seperti X Mi, kami bermula dengan MIUI dan memenangi pasaran perisian terlebih dahulu, membuatkan semua orang merasakan bahawa sistem ini sangat mudah digunakan, dan kemudian mula membangunkan telefon bimbit. Ini menunjukkan bahawa perisian dan perkakasan sememangnya merupakan dua komponen terpenting bagi telefon mudah alih moden, dan tiada satu pun boleh bertahan tanpanya. Kali ini, kami akan menggunakan mod pembina untuk hanya melaksanakan satu set komponen dialog!Rajah kelas dialog
Kod sumber penuh: https://github.com/zhangyue0503/designpatterns-php /blob/master/16.builder/source/builder-dialog.php
Penerangan
<?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();
Alamat asal: https://juejin.cn/post/6844903981836320781Pengarang: Pengurus Projek TegarPembelajaran yang disyorkan: "
Video PHP tutorial》
Atas ialah kandungan terperinci Analisis mendalam tentang corak pembina dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!