Ü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. A
factory 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)
- (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
- A példányosítás kiterjeszthetővé tétele (új típus hozzáadása nem módosítja az alap kódot).
- Elősegíti a nyitott/zárt elv (Open/Closed Principle) betartását.
- 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.