Abstract Factory یک الگوی طراحی در برنامه نویسی است که اجازه میدهد تا یک مجموعه از اشیاء مرتبط با هم را ایجاد کنید بدون آنکه بخواهید جزئیات ساخت آنها را بدانید. این الگو اجازه میدهد که یک کارخانه (Factory) انتزاعی برای ایجاد اشیاء مختلف تعریف شود و سپس از آن استفاده شود تا اشیاء مورد نظر را بسازد. به عبارت دیگر، Abstract Factory به شما این امکان را میدهد که یک خانواده اشیاء مرتبط را ایجاد کنید بدون آنکه به جزئیات پیادهسازی آنها فکر کنید.
مثال پرداخت بانک با الگوی طراحی Abstract factory:
برای پیادهسازی مثال پرداخت بانک با استفاده از الگوی Abstract Factory در زبان جاوا، ابتدا یک رابط Abstract Factory به نام PaymentFactory تعریف میکنیم:
interface PaymentFactory { PaymentProcessor createPaymentProcessor(); PaymentGateway createPaymentGateway(); }
سپس کلاسهای مربوط به پردازش پرداخت و درگاه پرداخت را تعریف میکنیم:
interface PaymentProcessor { void processPayment(double amount); } class CreditCardProcessor implements PaymentProcessor { @Override public void processPayment(double amount) { System.out.println("Processing credit card payment of $" + amount); } } class PayPalProcessor implements PaymentProcessor { @Override public void processPayment(double amount) { System.out.println("Processing PayPal payment of $" + amount); } } interface PaymentGateway { void connect(); } class BankPaymentGateway implements PaymentGateway { @Override public void connect() { System.out.println("Connecting to bank payment gateway"); } } class PayPalGateway implements PaymentGateway { @Override public void connect() { System.out.println("Connecting to PayPal gateway"); } }
حالا میتوانیم دو فابریک جدید برای پردازش پرداخت با کارت اعتباری و پرداخت از طریق PayPal ایجاد کنیم:
class CreditCardPaymentFactory implements PaymentFactory { @Override public PaymentProcessor createPaymentProcessor() { return new CreditCardProcessor(); } @Override public PaymentGateway createPaymentGateway() { return new BankPaymentGateway(); } } class PayPalPaymentFactory implements PaymentFactory { @Override public PaymentProcessor createPaymentProcessor() { return new PayPalProcessor(); } @Override public PaymentGateway createPaymentGateway() { return new PayPalGateway(); } }
حالا میتوانیم از Abstract Factory برای انتخاب نوع پرداخت (کارت اعتباری یا PayPal) و ایجاد اجزای مربوط به آن استفاده کنیم:
public class Main { public static void main(String[] args) { PaymentFactory creditCardFactory = new CreditCardPaymentFactory(); PaymentProcessor creditCardProcessor = creditCardFactory.createPaymentProcessor(); PaymentGateway bankGateway = creditCardFactory.createPaymentGateway(); creditCardProcessor.processPayment(100.0); bankGateway.connect(); PaymentFactory payPalFactory = new PayPalPaymentFactory(); PaymentProcessor payPalProcessor = payPalFactory.createPaymentProcessor(); PaymentGateway payPalGateway = payPalFactory.createPaymentGateway(); payPalProcessor.processPayment(50.0); payPalGateway.connect(); } }
با استفاده از الگوی Abstract Factory، ما میتوانیم بدون نگرانی از جزئیات پیادهسازی، اجزای مربوط به پرداخت با کارت اعتباری یا PayPal را ایجاد کرده و استفاده کنیم.