creational pattern
Főnév
creational pattern (tsz. creational patterns)
- (informatika) A létrehozási minták (Creational Design Patterns) célja, hogy rugalmas, újrahasználható és karbantartható módon hozzunk létre objektumokat — anélkül, hogy a példányosítás részletei szorosan hozzá lennének kötve a kódhoz.
👉 Ezek a minták elválasztják az objektum létrehozását annak használatától, és segítenek elkerülni a “hard-coded new” hívásokat.
🏗️ 5 klasszikus Creational (létrehozási) tervezési minta
| Minta | Rövid célja |
|---|---|
| Singleton | Egyetlen példány biztosítása egy osztályból |
| Factory Method | Alosztály dönt a példányosításról |
| Abstract Factory | Objektumcsaládok példányosítása, interfészen keresztül |
| Builder | Összetett objektum lépésenkénti építése |
| Prototype | Objektum klónozása meglévő példány alapján |
1️⃣ Singleton – “Egyetlen példány”
🎯 Cél:
Csak egy példány jöhet létre az adott osztályból, és azt globálisan elérhetővé teszi.
🧠 Tipikus példa: beállítások, naplózás, adatbázis kapcsolat.
class Logger {
private:
static Logger* instance;
Logger() {}
public:
static Logger* getInstance() {
if (!instance)
instance = new Logger();
return instance;
}
void log(const std::string& msg) {
std::cout << "LOG: " << msg << "\n";
}
};
Logger* Logger::instance = nullptr;
2️⃣ Factory Method – “Gyár metódus”
🎯 Cél:
A példányosítást alaposztály absztrakt függvénye végzi el, az alosztály dönt, hogy pontosan milyen objektumot hozzon létre.
Példa:
class Shape {
public:
virtual void draw() = 0;
virtual ~Shape() = default;
};
class Circle : public Shape {
public:
void draw() override { std::cout << "Kör rajzolása\n"; }
};
class ShapeFactory {
public:
virtual Shape* createShape() = 0;
};
class CircleFactory : public ShapeFactory {
public:
Shape* createShape() override {
return new Circle();
}
};
3️⃣ Abstract Factory – “Absztrakt gyár”
🎯 Cél:
Több egymáshoz tartozó objektumot (pl. UI elemek egy stílusban) hozzunk létre, anélkül, hogy megmondanánk a konkrét osztályokat.
Példa:
class Button {
public:
virtual void render() = 0;
};
class WinButton : public Button {
void render() override { std::cout << "Windows gomb\n"; }
};
class MacButton : public Button {
void render() override { std::cout << "Mac gomb\n"; }
};
class GUIFactory {
public:
virtual Button* createButton() = 0;
};
class WinFactory : public GUIFactory {
Button* createButton() override {
return new WinButton();
}
};
class MacFactory : public GUIFactory {
Button* createButton() override {
return new MacButton();
}
};
4️⃣ Builder – “Építő”
🎯 Cél:
Összetett objektum létrehozása lépésenként, különválasztva az építési folyamatot a végső objektumtól.
Példa:
class Pizza {
public:
void addTopping(const std::string& topping) {
std::cout << "Hozzáadva: " << topping << "\n";
}
};
class PizzaBuilder {
Pizza* pizza;
public:
PizzaBuilder() { pizza = new Pizza(); }
PizzaBuilder* addCheese() { pizza->addTopping("sajt"); return this; }
PizzaBuilder* addPepperoni() { pizza->addTopping("szalámi"); return this; }
Pizza* build() { return pizza; }
};
5️⃣ Prototype – “Prototípus másolása”
🎯 Cél:
Új objektum létrehozása létező példány másolásával, nem new-vel. Különösen hasznos, ha példányosítás drága (pl. mély példány, konfiguráció).
Példa:
class Document {
public:
virtual Document* clone() = 0;
virtual void print() = 0;
};
class Report : public Document {
public:
Document* clone() override { return new Report(*this); }
void print() override { std::cout << "Jelentés nyomtatása\n"; }
};
📊 Összehasonlítás
| Minta | Példányosítás módja | Előny |
|---|---|---|
| Singleton | Egyetlen példány | Globális állapot, központi vezérlés |
| Factory Method | Alosztály dönt | Bővíthető, de absztrakciós réteg kell |
| Abstract Factory | Egységes objektumcsalád | UI témák, plug-in architektúrák |
| Builder | Lépésenkénti építés | Testreszabható, olvasható kód |
| Prototype | Másolással példányosítás | Gyors másolás, konfigurált alapból |
🎯 Mikor használd?
| Probléma | Javasolt minta |
|---|---|
| Csak egy példány kell | Singleton |
| Többféle osztály közül kell választani | Factory Method |
| Különböző, kompatibilis objektumokat kell együtt kezelni | Abstract Factory |
| Nagyon összetett objektumot építesz | Builder |
Sokat klónozol, vagy drága a new |
Prototype |
- creational pattern - Szótár.net (en-hu)
- creational pattern - Sztaki (en-hu)
- creational pattern - Merriam–Webster
- creational pattern - Cambridge
- creational pattern - WordNet
- creational pattern - Яндекс (en-ru)
- creational pattern - Google (en-hu)
- creational pattern - Wikidata
- creational pattern - Wikipédia (angol)