Wzorce projektowe, cz. 4 Property

Property to wzorzec projektowy, którego zadanie, jest przechowywać i udostępniać dane w obrębie aplikacji. Implementacja wzorca zastępuje globalne zmienne jakże nielubiane w dobie programowania obiektowego. Brzmi znajomo? Wzorzec ten ma zbliżone zastosowania do Singletona. Jednak tu nie tworzymy obiektu – wszystkie metody są statyczne.


Diagram klas wzorca Property

Wszystkie dane trzymamy w tablicy array. Za pomocą metod set() i get() możemy ustawiać/pobierać dane. Poza tym możemy zaimplementować inne metody kontrolujące np. dostęp do zmiennych.

Przykładowa implementacja

<?php
class Property{
    private static $array = array();

    public static function set($name, $value) {
        self::$array[$name]=$value;
    }
    public static function get($name) {
        return self::$array[$name];
    }
    public static function exist($name) {
        return isset(self::$array[$name]);
    }
}

//testy
Property::set("nazwa1", 1);
Property::set("nazwa2", "wartosc");
echo Property::get("nazwa2"); // wyswietli "wartosc"
echo Property::exist("nazwa1"); // wyswietli "true"
echo Property::exist("nazwa3"); // wyswietli "false"
?>

Przykład z życia wzięty

Rozważmy klasę zawierającą konfigurację aplikacji.

<?php
class Config{
    private static $conf = array();

    public static function set($name, $value) {
        self::$conf[$name]=$value;
    }
    public static function get($name) {
        return self::$conf[$name];
    }
    public static function exist($name) {
        return isset(self::$conf[$name]);
    }
}

//testy
Config::set("language", "pl");
Config::set("path", "/jakas_sciezka/");
echo Config::get("language"); // wyswietli "pl"
echo Config::get("path"); // wyswietli "/jakas_sciezka/"
echo Config::exist("language"); // wyswietli "true"
?>

Klasa Config zawiera tablicę conf z podstawowymi ustawieniami aplikacji. Dzięki zastosowaniu pola statycznego zmiana ustawień w jednym miejscu (np. zmiana języka na stronie przez użytkownika) jest „widoczna” w każdym miejscu aplikacji.

Zalety i wady

Zalety:

  • Globalny dostęp do zmiennych wraz z dobrodziejstwami jakie daje programowanie obiektowe.
  • Wygodne API do ustawiania/pobierania danych, które muszą mieć dostęp globalny.

Wady:

  • Nie znam żadnej :)

Zastosowanie

Property można wykorzystać do przechowywania konfiguracji aplikacji.

Powiązane tematy

Print Friendly, PDF & Email