دیزاین پترن Builder یکی از الگوهای طراحی در برنامهنویسی است که برای ایجاد یک شیء پیچیده با پارامترهای مختلف و به ترتیب مشخص استفاده میشود. این الگو به برنامهنویس امکان میدهد یک فرایند ساخت یک شیء را از مراحل مختلف جدا کند تا بتواند با ترکیب متدهای مختلف به آسانی انواع مختلفی از شیء را ایجاد کند. این الگو معمولاً در مواردی کاربرد دارد که شیءها دارای پارامترهای مختلفی هستند و نیاز به ساختاردهی پیچیدهای دارند. با استفاده از الگوی Builder، برنامهنویس میتواند از یک سازنده (Builder) استفاده کند تا پارامترها را به ترتیب یا به صورت اختیاری تنظیم کند و در نهایت یک شیء نهایی را ایجاد کند. این الگو از اهمیت زیادی در طراحی نرمافزارهایی با پیچیدگیهای ساختاری بالا و مدیریت پارامترهای مختلف برخوردار است و به ایجاد کدی کمتر تکراری و قابل نگهداری کمک میکند. الگوی طراحی Builder در PHP به صورت زیر پیادهسازی میشود. در این مثال، ما یک Builder برای ایجاد یک شیء “Product” ایجاد خواهیم کرد. ابتدا یک کلاس Product و سپس یک کلاس Builder برای ساخت این محصول ایجاد میکنیم:
// کلاس Product
class Product {
private $part1;
private $part2;
public function setPart1($part1) {
$this->part1 = $part1;
}
public function setPart2($part2) {
$this->part2 = $part2;
}
public function show() {
echo "Part 1: " . $this->part1 . " ";
echo "Part 2: " . $this->part2 . " ";
}
}
// کلاس Builder
class ProductBuilder {
private $product;
public function __construct() {
$this->product = new Product();
}
public function buildPart1($part1) {
$this->product->setPart1($part1);
}
public function buildPart2($part2) {
$this->product->setPart2($part2);
}
public function getResult() {
return $this->product;
}
}
// استفاده از الگوی Builder
$builder = new ProductBuilder();
$builder->buildPart1("Part 1 Data");
$builder->buildPart2("Part 2 Data");
$product = $builder->getResult();
$product->show();
در این مثال، ما ابتدا یک شیء Product ایجاد کردیم و سپس با استفاده از کلاس Builder، شیء Product را به مراحل مختلفی ایجاد کردیم. سرانجام، با استفاده از getResult() میتوانیم شیء Product نهایی را دریافت و نمایش دهیم.
این الگو به ما امکان میدهد تا شیء Product را با تنظیمات مختلف ایجاد کنیم و همچنین کدی مدیریتپذیر و تکراری کمتر داشته باشیم.