Factory Method در مقابل Abstract Factory
Factory Method یک متد است که در کلاسهای فرزند Override میشود تا نحوه ساخت یک نوع محصول خاص را تعیین کند، در حالی که Abstract Factory یک Interface کامل است که خانوادهای از محصولات مرتبط را بدون مشخص کردن کلاس دقیق آنها تولید میکند و معمولاً از چند Factory Method در کنار هم تشکیل شده است.
| ویژگی | Factory Method | Abstract Factory |
|---|---|---|
| نوع سازه | یک متد | یک Interface کامل |
| تعداد محصول تولیدی | یک نوع | خانوادهای از محصولات مرتبط |
| پیچیدگی | کم | بیشتر |
کِی از Factory Method استفاده کنیم؟
وقتی فقط یک نوع محصول دارید و میخواهید نحوه ساخت آن را در کلاس فرزند قابل تغییر کنید.
کِی از Abstract Factory استفاده کنیم؟
وقتی باید خانوادهای از محصولات مرتبط و سازگار با هم (مثل دکمه و چکباکس همسبک) را بدون وابستگی به کلاس دقیق آنها بسازید.
مثال Factory Method
abstract class Dialog
{
public abstract Button CreateButton(); // Factory Method
}
class WindowsDialog : Dialog
{
public override Button CreateButton() => new WindowsButton();
}
مثال Abstract Factory
interface IUIFactory
{
Button CreateButton();
Checkbox CreateCheckbox();
}
class WindowsUIFactory : IUIFactory
{
public Button CreateButton() => new WindowsButton();
public Checkbox CreateCheckbox() => new WindowsCheckbox();
}
اشتباه رایج
اشتباه رایج استفاده از Abstract Factory پیچیده برای ساخت فقط یک نوع محصول ساده است؛ در چنین حالتی یک Factory Method ساده کافی است و اضافهکردن یک Interface کامل با چند متد فقط پیچیدگی غیرضروری اضافه میکند.
جمعبندی
برای ساخت یک نوع محصول با منطق قابل تغییر در فرزندان از Factory Method و برای ساخت خانوادهای از محصولات مرتبط و سازگار از Abstract Factory استفاده کنید.
