Dzisiaj12 czerwca, 2021

Wzorzec Rejestr

Jak sama nazwa wskazuje, korzystając z tego wzorca, dane zapisuje się wykorzystując tak zwany rejestr (podobnie system Windows zapisuje dane konfiguracyjne). Ten wzorzec to po prostu pojedyncza globalna klasa umożliwiająca dostęp do jednego egzemplarza obiektu oraz w razie konieczności tworzenia innych egzemplarzy, również w zakresie globalnym. Poniżej moja interpretacja dla prostego rejestru składającego się z 4 metod:

Jak widzisz, ten wzorzec jest bardziej złożony niż Singleton – możemy tworzyć kilka egzemplarzy obiektu, nie jesteśmy ograniczeni do używania tylko jednego obiektu.

Przykładowy kod z użyciem Wzorca Rejestr

<?php

class Registry 
{
    private static $_data = array();

    public static function set($object, $name = null)
    {
        // jeśli nie podano nazwy, użyj nazwy klasy
        $name ?? strtolower(get_class($object));
        if(isset(self::$_data[$name])) throw new Exception("Obiekt o podanej nazwie istnieje");
        self::$_data[$name] = $object;
    }
    public static function &get($name)
    {
        if(!self::contains($name)) throw new Exception("Nie ma takiego obiektu");
        return self::$_data[$name];
    }
    public static function contains($name)
    {
        return(isset(self::$_data[$name]) ? true : false);    
    }
    public static function remove($name)
    {
        if(self::contains($name)) unset(self::$_data[$name]);
    }
}
// poniższy kod tylko do potestowania 
class Test
{
    public $test = 123;
}
Registry::set(new Test, "obiekt");
echo Registry::get("obiekt")->test; // zwróci 123

Udostępnij artykuł
guest
1 Komentarz
Inline Feedbacks
View all comments