Шаблоны проектирования — ценный инструмент в разработке программного обеспечения, поскольку они предоставляют проверенные решения распространенных проблем и способствуют повторному использованию кода, удобству сопровождения и масштабируемости. В PHP существует несколько шаблонов проектирования, которые вы можете использовать. Давайте рассмотрим некоторые из них вместе с примерами кода:
- Шаблон 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;
}
}
- Шаблон 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.
- Шаблон «Наблюдатель».
Шаблон «Наблюдатель» устанавливает связь «один-ко-многим» между объектами, при которой изменения в одном объекте вызывают обновления в других зависимых объектах.
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.
- Шаблон стратегии.
Шаблон стратегии определяет семейство взаимозаменяемых алгоритмов и инкапсулирует каждый из них, позволяя использовать их взаимозаменяемо.
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. Включив эти шаблоны в свой код, вы сможете улучшить его структуру, гибкость и удобство сопровождения.