factory method pattern

Üdvözlöm, Ön a factory method pattern szó jelentését keresi. A DICTIOUS-ban nem csak a factory method pattern szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a factory method pattern szót egyes és többes számban mondani. Minden, amit a factory method pattern szóról tudni kell, itt található. A factory method pattern szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Afactory method pattern és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

factory method pattern (tsz. factory method patterns)

  1. (informatika) A Factory Method pattern (gyári metódus minta) egy kreációs (példányosító) tervezési minta, amely lehetővé teszi, hogy az objektumok példányosítását a származtatott osztályokra bízzuk, nem pedig közvetlenül a klienskódra. Ahelyett, hogy a new kulcsszót közvetlenül használnánk, egy absztrakt metódus hozza létre a megfelelő példányt – így a kód rugalmasabban bővíthető és testreszabható.



🧠 Miért hasznos?

  • Ha a példányosítási logika változik, de a klienskódot nem akarod módosítani.
  • Ha a létrehozott objektum altípusa a futásidő során dől el.
  • Ha egy rendszer sokféle terméket hoz létre, de a létrehozási módot el akarod különíteni.



🎯 Cél

  1. A példányosítás kiterjeszthetővé tétele (új típus hozzáadása nem módosítja az alap kódot).
  2. Elősegíti a nyitott/zárt elv (Open/Closed Principle) betartását.
  3. A new kulcsszó kapszulázása a klienskódból.



🧱 Felépítés

  • Creator (Alap osztály vagy interfész): tartalmaz egy absztrakt factoryMethod() függvényt, amely létrehozza a terméket.
  • ConcreteCreator: implementálja a factoryMethod()-ot.
  • Product (Termék interfész vagy absztrakt osztály): az előállított objektum absztrakt típusa.
  • ConcreteProduct: a konkrét példány.



🔧 Példa (C++)

// Termék interfész
class Product {
public:
    virtual void use() const = 0;
    virtual ~Product() {}
};

// Konkrét termék
class ConcreteProductA : public Product {
public:
    void use() const override {
        std::cout << "Using Product A\n";
    }
};

// Konkrét termék
class ConcreteProductB : public Product {
public:
    void use() const override {
        std::cout << "Using Product B\n";
    }
};

// Gyár osztály (Creator)
class Creator {
public:
    virtual Product* factoryMethod() const = 0;

    void operation() const {
        Product* p = factoryMethod();
        p->use();
        delete p;
    }

    virtual ~Creator() {}
};

// Konkrét gyár (ConcreteCreator)
class ConcreteCreatorA : public Creator {
public:
    Product* factoryMethod() const override {
        return new ConcreteProductA();
    }
};

class ConcreteCreatorB : public Creator {
public:
    Product* factoryMethod() const override {
        return new ConcreteProductB();
    }
};

🔨 Használat

int main() {
    Creator* creator = new ConcreteCreatorA();
    creator->operation();  // Product A

    delete creator;
    creator = new ConcreteCreatorB();
    creator->operation();  // Product B

    delete creator;
    return 0;
}

✅ Előnyök

  • Elrejti az objektum példányosítását a klienskód elől.
  • Egyszerűen bővíthető új típusokkal (új ConcreteCreator osztály).
  • Laza csatolás: a kliens csak a Product interfészt ismeri.



❌ Hátrányok

  • Több osztály: minden új terméktípushoz új osztályt kell létrehozni.
  • Bonyolultabb lehet kis projektekben.



🧪 Használati példák

  • Grafikus felhasználói felületek (pl. különböző gomb típusok: Windows vs. macOS)
  • Játékfejlesztés: különböző ellenségek/karakterek generálása
  • Dokumentumkezelés: új fájltípus példányosítása (PDF, TXT, DOCX)
  • Szerver oldali válaszgenerálás különféle kérés típusokra



🆚 Factory Method vs Abstract Factory

Factory Method Abstract Factory
Mit hoz létre? Egy terméket Egymással kapcsolódó objektumokat (családot)
Példányosítás típusa Egy termékpéldány/metódus Több termék, több interfész
Bonyolultság Közepes Magas (összetettebb hierarchia)
Használati eset Egyedi példányok Összefüggő objektumok létrehozása együtt



📌 TL;DR

  • A Factory Method minta egy absztrakció az objektum példányosítására.
  • Lehetővé teszi, hogy a példányosítás részleteit a leszármazott osztályra bízzuk.
  • Erőteljes eszköz a nyitott/zárt elv alkalmazásához, ha jól strukturált kódot szeretnénk.