creational pattern

Üdvözlöm, Ön a creational pattern szó jelentését keresi. A DICTIOUS-ban nem csak a creational 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 creational pattern szót egyes és többes számban mondani. Minden, amit a creational pattern szóról tudni kell, itt található. A creational pattern szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Acreational 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

creational pattern (tsz. creational patterns)

  1. (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