Új
Home » Tervezési minták – Singleton, Factory, Observer

Tervezési minták – Singleton, Factory, Observer

A tervezési minták általános és újrahasznosítható megoldások szoftvertervezési problémákra. Egy tervezési minta a megoldás vagy egy sablon leírása, amely alkalmazható a probléma megoldására – nem pedig egy közvetlenül alkalmazható kódrészlet. Objektumorientált minták általában az osztályok vagy objektumok közötti kapcsolatokat és interakciókat mutatják be, anélkül hogy meghatároznák az érintett osztályok vagy objektumok végleges formáját.

Singleton Minta

A Singleton minta célja, hogy egy osztály példányainak számát egyetlen objektumra korlátozza. Ez lehetővé teszi, hogy az alkalmazásban egyetlen példányt használjunk egy objektumból.

Mikor hasznos?
  • Logoló objektumok.
  • Megosztott erőforrások, például adatbázis-kapcsolatok vagy socketek.
  • Alkalmazás-konfigurációs objektumok.
  • Factory objektumok.

PHP implementáció:

class Singleton {
    private static $instance = null;

    // Konstruktor privát, hogy ne lehessen közvetlenül példányosítani
    private function __construct() {}

    // Statikus metódus, amely visszaadja az egyetlen példányt
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function doSomething() {
        echo "Singleton példány működik.\n";
    }
}

// Használat
$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();

$instance1->doSomething();

// Ellenőrizhetjük, hogy ugyanaz az objektum-e
var_dump($instance1 === $instance2); // true

Factory Minta

A Factory minta olyan objektumok generálására használatos, amelyek kapcsolódó osztályok példányait hozzák létre (például egy közös interfészt vagy absztrakt osztályt implementálnak).

Mikor hasznos?
  • Amikor el akarjuk választani az objektumokat a tényleges példányosítási logikától.
  • Ha az objektum létrehozása összetett (például több lépést igényel).

PHP implementáció:

interface Product {
    public function getType();
}

class ProductA implements Product {
    public function getType() {
        return "Ez egy A típusú termék.";
    }
}

class ProductB implements Product {
    public function getType() {
        return "Ez egy B típusú termék.";
    }
}

class Factory {
    public static function createProduct($type) {
        switch ($type) {
            case 'A':
                return new ProductA();
            case 'B':
                return new ProductB();
            default:
                throw new Exception("Ismeretlen termék típus.");
        }
    }
}

// Használat
$product1 = Factory::createProduct('A');
$product2 = Factory::createProduct('B');

echo $product1->getType(); // Ez egy A típusú termék.
echo $product2->getType(); // Ez egy B típusú termék.

Observer Minta

Az Observer minta egy 1:n függőségi kapcsolatot definiál objektumok között. Amikor egy objektum állapota megváltozik, az összes ráépülő objektum (megfigyelő) automatikusan értesül és frissül.

Mikor hasznos?
  • Amikor több osztály függ egy másik osztály viselkedésétől.
  • Például eseményfigyelés, GUI frissítések.

PHP implementáció:

class Subject {
    private $observers = [];

    public function attach($observer) {
        $this->observers[] = $observer;
    }

    public function detach($observer) {
        $key = array_search($observer, $this->observers);
        if ($key !== false) {
            unset($this->observers[$key]);
        }
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update();
        }
    }

    public function changeState() {
        echo "A Subject állapota megváltozott.\n";
        $this->notify();
    }
}

interface Observer {
    public function update();
}

class ConcreteObserver implements Observer {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function update() {
        echo "Observer {$this->name} értesítve lett!\n";
    }
}

// Használat
$subject = new Subject();

$observer1 = new ConcreteObserver("1");
$observer2 = new ConcreteObserver("2");

$subject->attach($observer1);
$subject->attach($observer2);

$subject->changeState(); // Az összes observer értesítve lesz

Zárszó

Ezek a példák bemutatják, hogy a Singleton, Factory és Observer minták hogyan valósíthatók meg PHP-ben. Ezek az alapvető minták gyakran használtak különböző problémák megoldására az objektumorientált szoftvertervezésben.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active

Kik vagyunk

Javasolt szöveg: A weboldalunk címe: https://blog.solutionmaster.hu.

Hozzászólások

Javasolt szöveg: Hozzászólás beküldésekor a hozzászólási űrlapban megadottakon kívül begyűjtésre kerül a hozzászóló IP címe és a böngészőazonosító karakterlánc a kéretlen tartalmak kiszűrése céljából.

Egy személytelenített, az e-mail címből előállított karakterlánc (hashnek szokás nevezni) kerül továbbításra a Gravatar szolgáltatás felé, ha ez az oldalon használatban van. A Gravatar szolgáltatás feltételei az alábbi címen tekinthetőek meg: https://automattic.com/privacy/. A hozzászólás elfogadása után, a hozzászólásunk tartalma és a profil képünk is megjelenik nyilvánosan.

Média

Javasolt szöveg: Amennyiben regisztrált felhasználó által kerül kép feltöltésre a honlapra, kerülni kell az az olyan EXIF-eket, amelyekben GPS pozíció adatok is szerepelnek. A honlap látogatói ezeket letölthetik és kinyerhetik a helyadatokat a honlapon található képekből.

Sütik

Javasolt szöveg: Ha hozzászólást írunk a honlapon, a megadott nevet, e-mail és honlap címet sütikben eltároljuk. A tárolás a kényelmi célokat szolgál azért, így a következő hozzászóláskor ezeket a mező adatokat nem kell kitölteni. A sütik lejárati ideje egy év.

Ha ellátogatunk a bejelentkezési oldalra, akkor átmeneti sütiket állítunk be annak érdekében, hogy megállapítsuk, hogy a böngésző elfogadja-e a sütiket. Ezek a sütik nem tartalmaznak személyes információt, és törlődnek, ahogy bezárjuk a böngészőt.

A honlapra történő bejelentkezéskor több sütit hozunk létre, amely elmenti a bejelentkezési információt és a szerkesztőfelület megjelenítési opcióit. A bejelentkezési sütik két napig érvényesek, a szerkesztőfelület képernyő opcióit tároló süti egy évig. Amennyiben az "Emlékezz rám" opciót bejelöljük, a bejelentkezés két hétig folytatódik. Kijelentkezéskor a bejelentkezési sütik eltávolításra kerülnek.

Amennyiben bejegyzést vagy oldalt szerkesztünk, egy újabb sütit tárol el a böngészőnk. Ez a süti nem tartalmaz személyes adatot, egyszerűen csak a bejegyzés azonosító számát tárolja, amelyet szerkesztettünk. Egy nap múlva jár le az érvényessége.

Más honlapokról származó beágyazott tartalmak

Javasolt szöveg: A honlapon elérhető bejegyzések külső forrásból származó beágyazott tartalmakat (pl. videók, képek, cikkek stb.) használhatnak. A külső forrásból származó beágyazott tartalmak pontosan úgy viselkednek, mintha meglátogattunk volna egy másik honlapot.

Ezek a webhelyek lehetséges, hogy adatot gyűjtenek a látogatókról, sütiket vagy harmadik féltől származó követőkódot használnak, figyelik a beágyazott tartalommal kapcsolatos felhasználói viselkedést, ha rendelkezünk felhasználói fiókkal és be vagyunk jelentkezve az oldalra.

Kivel osztjuk meg a felhasználói adatokat

Javasolt szöveg: Ha jelszó visszaállítást kér, akkor az IP-címet a visszaállító e-mail tartalmazni fogja.

Mennyi ideig őrizzük a személyes adatot

Javasolt szöveg: Ha hozzászólunk, a hozzászólás és annak metaadatai nem meghatározható ideig a rendszerben maradnak. Ennek célja, hogy az összes ezt követő bármely hozzászólás általunk megismertté és jóváhagyottá váljon, azaz ne kerüljön fel a moderálandó hozzászólások listájára.

A honlapon regisztrált felhasználók (ha vannak ilyenek) személyes adatai a saját felhasználói profiljukban is tárolásra kerülnek. Minden felhasználó megtekintheti, szerkesztheti vagy törölheti a személyes adatait bármikor (kivéve, hogy nem változtathatja meg a saját felhasználónevét). A honlap rendszergazdái ezen információkat szintén megtekinthetik és szerkeszthetik.

Milyen jogokkal rendelkezik a felhasználó a saját adatai kapcsán

Javasolt szöveg: A weboldalon regisztrált fiók vagy hozzászólás írása esetén kérhető a személyes adatok export fájlban történő megküldése, amely bármilyen adatot tartalmaz, amit korábban a felhasználó rendelkezésünkre bocsátott. Kérhető továbbá, hogy bármilyen korábban megadott személyes adatot töröljük. Ez nem vonatkozik azokra az adatokra, amelyeket adminisztrációs, jogi vagy biztonsági okokból kötelező megőriznünk.

Hová kerülnek továbbküldésre az adatok

Javasolt szöveg: A látogatók által beküldött hozzászólásokat automatikus spamszűrő szolgáltatás ellenőrizheti.

Save settings
Cookies settings