Návrhové vzory: Messenger (přepravka)

  • počet atributů = počet přenášených hodnot
  • instance třídy jsou tzv. immutable objects
  • atributy třídy jsou veřejné konstanty
    • lze k nim (z důvodu efektivity) přistupovat přímo
    • nelze je dále měnit
  • lze definovat přístupové metody (gettery), příp. další užitečné metody
  • atributy třídy jsou nastaveny v konstruktoru, dále je nelze měnit (bezpečné předání dat)

Pokračování textu Návrhové vzory: Messenger (přepravka)

Návrhové vzory: Jednoduchá (statická) tovární metoda

Jedná se o jednodušší verzi návrhového vzoru (obecná) tovární metoda.

Použijeme, pokud potřebujeme funkčnost, kterou není schopen dodat konstruktor.
Pokud potřebujeme získat odkaz na objekt, ale z různých důvodů nechceme či nemůžeme použít konstruktor.

Pokračování textu Návrhové vzory: Jednoduchá (statická) tovární metoda

Návrhové vzory: Singleton (jedináček)

Existují případy, kdy potřebujeme dovolit vytvoření pouze jedné instance třídy. V tomto případě použijeme vzor Singleton.

Vlastnosti třídy typu Singleton:

  • konstruktor deklarován jako protected – zabrání vytváření nových instancí mimo třídu, pomocí operátoru new
  • magická metoda __clone() je deklarována jako private – zabrání klonování instance třída pomocí operátoru clone
  • magická metoda __wakeup() je deklarována jako private – zabrání unserializaci instance třídy prostřednictvím globální funkce unserialize()
  • A new instance is created via late static binding in the static creation method getInstance() with the keyword static. This allows the subclassing of the class Singleton in the example

  • statická proměnná
  • statická metoda getInstance() pro vytvoření instance

Návrhové vzory: Factory (továrna, tovární třída)

  • jeden z nejčastěji používaných návrhových vzorů
  • pomocí statické metody jedné třídy (facory) vytváříme objekty jiné třídy
  • výhody
    • pokud je vytvoření objektu třídy složitější, provádíme tak pouze jednou, v třídě továrny a nikoliv při každém vytváření nového objektu třídy
    • pokud je třída v budoucnu změněna, aktualizujeme vytvoření objektu této třídy pouze na jednom místě – v třídě továrny

Příklad použití

Běžná třída

class Automobile
{
    private $manufacturer;
    private $model;

    public function __construct($manufacturer, $model)
    {
        $this->manufacturer = $manufacturer;
        $this->model = $model;
    }

    public function getMakeAndModel()
    {
        return $this->manufacturer . ' ' . $this->model;
    }
}

Třída továrny

class AutomobileFactory
{
    public static function create($manufacturer, $model)
    {
        return new Automobile($manufacturer, $model);
    }
}

Použití

$skoda = AutomobileFactory::create('Skoda', 'SuperB');
print_r($skoda->getMakeAndModel());

Návrhové vzory: Přehled

Návrhové vzory (angl. design patterns) představují ověřený postup řešení (algoritmus) určité situace.

Výhody

  • Kvalitnější a rychlejší návrh
  • Řešení není třeba vymýšlet.
  • Ověřené řešení – nižží pravděpodobnost výskytu chyby.

Skupiny návrhových vzorů

Návrhové vzory dělíme do několika skupin:

Vzory pro vytváření (Creational)

  • Abstract Factory
  • Builder (Stavitel)
  • Factory (Továrna, tovární třída)
  • Factory Metod (Tovární metoda)
  • Multiton
  • Pool
  • Prototype (Prototyp)
  • Simple Factory
  • Singleton (Jedináček)
  • Static Factory

Strukturální vzory (Structural)

  • Adapter/Wrapper (Adaptér)
  • Bridge (Most)
  • Composite (Strom)
  • Data Mapper
  • Decorator (Dekorátor)
  • Dependency Injection
  • Facade (Fasáda)
  • Fluent Interface
  • Flyweight (Muší váha)
  • Proxy (Zástupce)
  • Registry

Vzory chování (Behavioral)

  • Chain of Responsibilities (Zřetězení odpovědností)
  • Command (Příkaz)
  • Iterator (Iterátor)
  • Mediator (Prostředník)
  • Memento
  • Null Object
  • Observer (Pozorovatel)
  • Specification
  • State (Stav)
  • Strategy (Strategie)
  • Template Method (Šablonová metoda)
  • Visitor (Návštěvník)

Kontejnery

Objekty určené k uložení jiných objektů.