Ví dụ về Strategy Pattern trong PHP
Hướng dẫn về Strategy Pattern trong PHP với ví dụ cụ thể giúp bạn hiểu rõ cách sử dụng mẫu thiết kế này trong lập trình hướng đối tượng.
Strategy pattern cho phép thay đổi thuật toán hoặc chiến lược thực thi tại runtime mà không cần thay đổi class đang sử dụng thuật toán đó. Đây là một pattern hữu ích để tạo các hành vi linh hoạt và dễ bảo trì.
<?php
// Strategy Pattern trong PHP
// Interface Strategy xác định phương thức chung
interface PaymentStrategy {
public function pay($amount);
}
// Các class cụ thể cho từng chiến lược thanh toán
class CreditCardPayment implements PaymentStrategy {
public function pay($amount) {
echo "Thanh toán $amount bằng thẻ tín dụng.\n";
}
}
class PayPalPayment implements PaymentStrategy {
public function pay($amount) {
echo "Thanh toán $amount qua PayPal.\n";
}
}
class CashPayment implements PaymentStrategy {
public function pay($amount) {
echo "Thanh toán $amount bằng tiền mặt.\n";
}
}
// Class thực hiện phương thức thanh toán dựa trên chiến lược
class ShoppingCart {
private $paymentStrategy;
// Gán chiến lược thanh toán
public function setPaymentStrategy(PaymentStrategy $strategy) {
$this->paymentStrategy = $strategy;
}
// Thực hiện thanh toán
public function checkout($amount) {
$this->paymentStrategy->pay($amount);
}
}
// Sử dụng Strategy Pattern
$cart = new ShoppingCart();
// Thanh toán bằng thẻ tín dụng
$cart->setPaymentStrategy(new CreditCardPayment());
$cart->checkout(100); // Output: Thanh toán 100 bằng thẻ tín dụng.
// Thanh toán bằng PayPal
$cart->setPaymentStrategy(new PayPalPayment());
$cart->checkout(200); // Output: Thanh toán 200 qua PayPal.
// Thanh toán bằng tiền mặt
$cart->setPaymentStrategy(new CashPayment());
$cart->checkout(300); // Output: Thanh toán 300 bằng tiền mặt.
?>
Giải thích chi tiết:
-
interface PaymentStrategy
: Đây là interface chiến lược chung cho các phương thức thanh toán, với phương thứcpay($amount)
. -
CreditCardPayment
,PayPalPayment
,CashPayment
: Các class cụ thể thực thi interfacePaymentStrategy
, mỗi class đại diện cho một phương thức thanh toán khác nhau. -
ShoppingCart
: Đây là class chứa phương thức thanh toán, sử dụngsetPaymentStrategy
để gán chiến lược thanh toán vàcheckout
để thực hiện thanh toán với số tiền cụ thể. -
Sử dụng Strategy Pattern: Đối tượng
ShoppingCart
có thể thay đổi chiến lược thanh toán một cách linh hoạt bằng cách gán các chiến lược khác nhau (CreditCardPayment
,PayPalPayment
,CashPayment
) mà không cần thay đổi logic chính trong classShoppingCart
.
Phiên bản PHP:
Mã này tương thích với PHP 5.0 trở lên.