الگوی طراحی Factory Method یکی از الگوهای ایجادی (Creational Design Patterns) است که در مهندسی نرمافزار استفاده میشود. این الگو به تعریف یک روش ساخت یا ایجاد شیء (object) متعلق به یک خانواده از شیءها میپردازد و اجازه میدهد که زیر کلاسها تعیین کننده نحوه ایجاد شیء باشند.
به طور خلاصه، الگوی Factory Method به کاربر امکان انتخاب نوع شیء مورد نظر را میدهد بدون اینکه جزئیات ساخت آن شیء را بداند. این الگو باعث کاهش وابستگی بین کلاسها میشود و امکان افزودن نوعهای جدید شیء بدون تغییر در کد موجود را فراهم میکند.
در الگوی Factory Method، یک کلاس انتزاعی (abstract class) یا یک رابط (interface) تعریف میشود که یک متد چندرسانهای (multimethod) به نام Factory Method دارد. زیر کلاسها این متد را پیادهسازی مجدد میکنند تا نحوه ساخت شیء را مشخص کنند.
به عنوان مثال در کد Java بالا، PaymentFactory یک Factory Method است که توسط BankPaymentFactory و CreditCardPaymentFactory پیادهسازی شده است. این الگو به کاربر امکان انتخاب نوع پرداخت (BankPayment یا CreditCardPayment) را میدهد بدون اینکه جزئیات ساخت هر نوع پرداخت را بداند.
مثال پرداخت بانک با الگوی طراحی Factory method:
// Product interface interface Payment { void makePayment(); } // Concrete Product 1 class BankPayment implements Payment { @Override public void makePayment() { System.out.println("Bank payment made."); } } // Concrete Product 2 class CreditCardPayment implements Payment { @Override public void makePayment() { System.out.println("Credit card payment made."); } } // Creator interface interface PaymentFactory { Payment createPayment(); } // Concrete Creator 1 class BankPaymentFactory implements PaymentFactory { @Override public Payment createPayment() { return new BankPayment(); } } // Concrete Creator 2 class CreditCardPaymentFactory implements PaymentFactory { @Override public Payment createPayment() { return new CreditCardPayment(); } } // Client code public class Main { public static void main(String[] args) { PaymentFactory bankPaymentFactory = new BankPaymentFactory(); Payment bankPayment = bankPaymentFactory.createPayment(); bankPayment.makePayment(); PaymentFactory creditCardPaymentFactory = new CreditCardPaymentFactory(); Payment creditCardPayment = creditCardPaymentFactory.createPayment(); creditCardPayment.makePayment(); } }