Общие шаблоны проектирования в PHP с примерами кода

Шаблоны проектирования — ценный инструмент в разработке программного обеспечения, поскольку они предоставляют проверенные решения распространенных проблем и способствуют повторному использованию кода, удобству сопровождения и масштабируемости. В PHP существует несколько шаблонов проектирования, которые вы можете использовать. Давайте рассмотрим некоторые из них вместе с примерами кода:

  1. Шаблон Singleton.
    Шаблон Singleton гарантирует, что во всем приложении существует только один экземпляр класса.
class Singleton
{
    private static $instance;
    private function __construct() { }
    public static function getInstance()
    {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
  1. Шаблон Factory:
    Шаблон Factory позволяет создавать объекты без прямого указания их конкретных классов.
interface Vehicle
{
    public function drive();
}
class Car implements Vehicle
{
    public function drive()
    {
        echo "Driving a car.";
    }
}
class Bike implements Vehicle
{
    public function drive()
    {
        echo "Riding a bike.";
    }
}
class VehicleFactory
{
    public static function create($type)
    {
        switch ($type) {
            case 'car':
                return new Car();
            case 'bike':
                return new Bike();
            default:
                throw new Exception("Invalid vehicle type.");
        }
    }
}
// Usage:
$car = VehicleFactory::create('car');
$car->drive(); // Output: Driving a car.
$bike = VehicleFactory::create('bike');
$bike->drive(); // Output: Riding a bike.
  1. Шаблон «Наблюдатель».
    Шаблон «Наблюдатель» устанавливает связь «один-ко-многим» между объектами, при которой изменения в одном объекте вызывают обновления в других зависимых объектах.
interface Observer
{
    public function update($data);
}
class UserObserver implements Observer
{
    public function update($data)
    {
        echo "User data updated: " . $data;
    }
}
class UserData
{
    private $observers = [];
    public function attachObserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }
    public function updateData($data)
    {
        // Update data logic...
        // Notify observers
        foreach ($this->observers as $observer) {
            $observer->update($data);
        }
    }
}
// Usage:
$userData = new UserData();
$userObserver = new UserObserver();
$userData->attachObserver($userObserver);
$userData->updateData("New user data"); // Output: User data updated: New user data.
  1. Шаблон стратегии.
    Шаблон стратегии определяет семейство взаимозаменяемых алгоритмов и инкапсулирует каждый из них, позволяя использовать их взаимозаменяемо.
interface PaymentMethod
{
    public function pay($amount);
}
class CreditCardPayment implements PaymentMethod
{
    public function pay($amount)
    {
        echo "Paying $amount via credit card.";
    }
}
class PayPalPayment implements PaymentMethod
{
    public function pay($amount)
    {
        echo "Paying $amount via PayPal.";
    }
}
class PaymentProcessor
{
    private $paymentMethod;
    public function setPaymentMethod(PaymentMethod $method)
    {
        $this->paymentMethod = $method;
    }
    public function processPayment($amount)
    {
        $this->paymentMethod->pay($amount);
    }
}
// Usage:
$paymentProcessor = new PaymentProcessor();
$creditCardPayment = new CreditCardPayment();
$paymentProcessor->setPaymentMethod($creditCardPayment);
$paymentProcessor->processPayment(100); // Output: Paying 100 via credit card.
$paypalPayment = new PayPalPayment();
$paymentProcessor->setPaymentMethod($paypalPayment);
$paymentProcessor->processPayment(50); // Output: Paying 50 via PayPal.

Это всего лишь несколько примеров распространенных шаблонов проектирования в PHP. Включив эти шаблоны в свой код, вы сможете улучшить его структуру, гибкость и удобство сопровождения.