من از الگوی طراحی "Factory Method" یا "Factory Builder" در برنامه‌نویسی برای ساخت شیء‌ها بدون نیاز به مشخص کردن کلاس آن‌ها استفاده کردم. 🏭 این الگو از اصول اصلی مهندسی نرم‌افزار استفاده می‌کند تا ایجاد شیء را از نحوه پیاده‌سازی آن جدا کند و امکان تغییرات آینده را فراهم کند.

یک مثال کاربردی از این الگو می‌تواند در یک برنامه مدیریت کاربران باشد. فرض کنید نیاز دارید کاربرانی با انواع مختلف (مثلاً کاربر عادی، کاربر ویژه، کاربر مدیریتی) را ایجاد کنید. شما می‌توانید از الگوی Factory Method استفاده کنید تا این کاربران را بدون نیاز به تعیین دقیق کلاس آن‌ها ایجاد کنید.

حالا بیایید به مثال کاربردی با زبان PHP بپردازیم:

فرض کنید ما یک سیستم مدیریت کاربران داریم و نیاز داریم کاربران را بسازیم. ابتدا یک رابط (Interface) برای کلاسی که کاربران را ایجاد می‌کند ایجاد می‌کنیم:


interface UserFactory {
public function createUser(): User;
}

سپس کلاس‌های کاربران مختلف را پیاده‌سازی می‌کنیم:


class RegularUser implements User {
public function __construct() {
// پیاده‌سازی کاربر عادی
}
}

class SpecialUser implements User {
public function __construct() {
// پیاده‌سازی کاربر ویژه
}
}

class AdminUser implements User {
public function __construct() {
// پیاده‌سازی کاربر مدیریتی
}
}

حالا می‌توانیم کلاس Factory برای ایجاد این کاربران را پیاده‌سازی کنیم:


class UserFactoryBuilder implements UserFactory {
public function createUser($type): User {
switch ($type) {
case 'regular':
return new RegularUser();
case 'special':
return new SpecialUser();
case 'admin':
return new AdminUser();
default:
throw new InvalidArgumentException('نوع کاربر نامعتبر است.');
}
}


و در نهایت، می‌توانیم از این کلاس برای ایجاد کاربران استفاده کنیم:



$userFactory = new UserFactoryBuilder();
$regularUser = $userFactory->createUser('regular');
$specialUser = $userFactory->createUser('special');
$adminUser = $userFactory->createUser('admin');


این الگو به شما اجازه می‌دهد که با استفاده از یک متد یا تابع سازنده (Factory Method) بدون نیاز به اطلاعات دقیق از کلاس‌هایی که ایجاد می‌شوند، شیء‌ها را ایجاد کنید.