Wzorce projektowe (design patterns)

Założenie: Przedstawimy podstawowe koncepcje wzorców projektowych w PHP, skupiając się na przykładach Singleton i Factory.

Krok po kroku:

  1. Singleton: Wzorzec Singleton zapewnia, że dana klasa będzie miała tylko jedną instancję.
    
    class Singleton {
        private static $instance;
    
        private function __construct() {}
    
        public static function getInstance() {
            if (!isset(self::$instance)) {
                self::$instance = new self();
            }
            return self::$instance;
        }
    
        public function doSomething() {
            echo "Robię coś!";
        }
    }
    
    $singleton1 = Singleton::getInstance();
    $singleton2 = Singleton::getInstance();
    
    var_dump($singleton1 === $singleton2); // true - obie zmienne wskazują na ten sam obiekt
    $singleton1->doSomething();
    					

    Wyjaśnienie: Klasa `Singleton` posiada prywatny konstruktor, uniemożliwiając tworzenie instancji poza metodą `getInstance()`. Metoda ta zwraca zawsze ten sam obiekt.

  2. Factory: Wzorzec Factory ułatwia tworzenie obiektów bez konieczności jawnego określania ich klasy.
    
    interface Shape {
        public function draw();
    }
    
    class Circle implements Shape {
        public function draw() {
            echo "Rysuję koło
    "; } } class Square implements Shape { public function draw() { echo "Rysuję kwadrat
    "; } } class ShapeFactory { public static function createShape(string $shapeType): Shape { switch ($shapeType) { case 'circle': return new Circle(); case 'square': return new Square(); default: throw new Exception("Nieznany typ figury"); } } } $circle = ShapeFactory::createShape('circle'); $square = ShapeFactory::createShape('square'); $circle->draw(); $square->draw();

    Wyjaśnienie: Klasa `ShapeFactory` tworzy obiekty różnych klas implementujących interfejs `Shape` w zależności od przekazanego parametru.

Ten przykład prezentuje podstawowe wzorce projektowe. Zachęcamy do dalszego zgłębiania tematu i poznawania innych wzorców!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *