Published on

تکنیک Factory در برنامه‌نویسی شیءگرا

نویسندگان

مقدمه

در برنامه‌نویسی شیءگرا، یکی از مهم‌ترین چالش‌ها مدیریت ایجاد اشیاء است. در بسیاری از موارد، استفاده‌ی مستقیم از new برای نمونه‌سازی اشیاء باعث افزایش وابستگی بین کلاس‌ها و کاهش انعطاف‌پذیری می‌شود. برای حل این مشکل، تکنیک Factory معرفی شده است.

تکنیک Factory یک الگوی طراحی رسمی نیست، بلکه یک تکنیک برنامه‌نویسی (Programming Idiom) است که مسئولیت ایجاد اشیاء را از کلاس‌های دیگر جدا می‌کند. این تکنیک معمولاً در قالب کلاس مستقل Factory پیاده‌سازی می‌شود.

در این مقاله، به‌صورت گام‌به‌گام مفهوم کلاس مستقل Factory را بررسی کرده و آن را با مثال‌های عملی در جاوا پیاده‌سازی خواهیم کرد.

📌 نکته: الگوی Factory Method Pattern نیز یک روش پیشرفته‌تر برای مدیریت ایجاد اشیاء است که در ادامه این مقاله به آن اشاره می‌کنیم و در مقاله‌ی بعدی به‌طور کامل بررسی خواهد شد.


🔹 تکنیک Factory چیست؟

تکنیک Factory روشی است که در آن ایجاد اشیاء در یک کلاس مستقل انجام می‌شود و دیگر نیازی نیست که کلاس‌های دیگر مستقیماً از new برای نمونه‌سازی استفاده کنند.

مزایای تکنیک Factory:

  • کاهش وابستگی بین کلاس‌ها
  • مدیریت بهتر فرآیند ایجاد اشیاء
  • امکان تغییر پیاده‌سازی بدون تغییر در کد اصلی
  • افزایش خوانایی و نگهداری بهتر کد

این تکنیک معمولاً به‌صورت یک کلاس مستقل Factory پیاده‌سازی می‌شود که مسئول ایجاد اشیاء است و در کل برنامه استفاده می‌شود.


🔹 پیاده‌سازی کلاس مستقل Factory

در این روش، یک کلاس مستقل برای ایجاد اشیاء مختلف ایجاد می‌کنیم که از آن در سراسر برنامه استفاده شود.

📌 پیاده‌سازی کلاس Factory مستقل

public class SimplePizzaFactory {
    public Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new CheesePizza();
        } else if (type.equals("pepperoni")) {
            return new PepperoniPizza();
        } else {
            return null;
        }
    }
}

📌 نحوه استفاده از کلاس Factory در یک سیستم واقعی

public class PizzaStore {
    private SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) {
        this.factory = factory;
    }

    public Pizza orderPizza(String type) {
        Pizza pizza = factory.createPizza(type);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
        return pizza;
    }
}

📌 مزایا و معایب این روش:

مزایا:

  • مدیریت بهتر فرآیند ایجاد اشیاء بدون نیاز به تغییر در کلاس‌های اصلی.
  • افزایش خوانایی و نگهداری کد.
  • کاهش وابستگی مستقیم بین کلاس‌ها.

معایب:

  • همچنان اگر تغییری در نوع اشیاء ایجاد شود، باید SimplePizzaFactory تغییر کند.
  • برای پروژه‌های پیچیده‌تر، Factory Method Pattern انعطاف‌پذیری بیشتری ارائه می‌دهد که در ادامه توضیح داده شده است.

🔹 تفاوت بین کلاس مستقل Factory و Factory Method Pattern

🔹 کلاس مستقل Factory یک روش ساده برای جدا کردن فرآیند ایجاد اشیاء از کلاس‌های اصلی است. اما همچنان یک مشکل اساسی دارد: اگر بخواهیم رفتار ایجاد اشیاء را بدون تغییر در کلاس Factory سفارشی‌سازی کنیم، این تکنیک انعطاف‌پذیری کافی را ندارد.

🔹 Factory Method Pattern این مشکل را حل می‌کند. در این الگو، ایجاد اشیاء به یک متد انتزاعی در کلاس والد واگذار می‌شود و هر زیرکلاس خودش تصمیم می‌گیرد که چه شیئی را تولید کند.

تفاوت کلیدی:

ویژگیکلاس مستقل FactoryFactory Method Pattern
ایجاد اشیاءتوسط یک کلاس ثابت انجام می‌شودتوسط زیرکلاس‌ها سفارشی‌سازی می‌شود
انعطاف‌پذیریکمتر – نیاز به تغییر کلاس Factory برای افزودن نوع جدیدبیشتر – زیرکلاس‌ها فقط متد createPizza() را تغییر می‌دهند
توسعه‌پذیریاگر شیء جدیدی اضافه شود، باید SimplePizzaFactory تغییر کندمی‌توان نوع‌های جدید را بدون تغییر در کلاس‌های قبلی اضافه کرد
وابستگی به کلاس‌های مشخصوابسته به یک کلاس واحد استوابستگی کاهش یافته، چون تولید اشیاء از کلاس والد جدا شده است

📌 در مقاله بعدی، Factory Method Pattern را با جزئیات بیشتری بررسی خواهیم کرد و نحوه‌ی پیاده‌سازی آن را توضیح خواهیم داد.


🔹 نتیجه‌گیری

کلاس مستقل Factory یک روش ساده اما بسیار مفید برای مدیریت ایجاد اشیاء در برنامه‌نویسی شیءگرا است. این تکنیک با جدا کردن فرآیند نمونه‌سازی از کلاس‌های اصلی، وابستگی‌ها را کاهش می‌دهد و امکان مدیریت بهتر تغییرات را فراهم می‌کند.

📌 اگر پروژه‌ی شما ساده است و نیاز به تغییرات زیادی در نحوه‌ی ایجاد اشیاء ندارید، کلاس مستقل Factory مناسب است. اما اگر نیاز به انعطاف‌پذیری و توسعه‌پذیری بیشتری دارید، Factory Method Pattern گزینه‌ی بهتری خواهد بود که در مقاله‌ی بعدی به‌طور کامل بررسی می‌شود.