- Payment Processing
Different customers may want to pay differently:
interface PaymentStrategy {
public function pay(int $amount): string;
}
class CreditCardPayment implements PaymentStrategy {
public function pay(int $amount): string {
return "Paid $amount using Credit Card";
}
}
class PayPalPayment implements PaymentStrategy {
public function pay(int $amount): string {
return "Paid $amount using PayPal";
}
}
class CryptoPayment implements PaymentStrategy {
public function pay(int $amount): string {
return "Paid $amount using Crypto";
}
}
class PaymentProcessor {
private PaymentStrategy $strategy;
public function __construct(PaymentStrategy $strategy) {
$this->strategy = $strategy;
}
public function process(int $amount): string {
return $this->strategy->pay($amount);
}
}
// β
Usage
echo (new PaymentProcessor(new PayPalPayment()))->process(100);
echo (new PaymentProcessor(new CryptoPayment()))->process(250);
π Use case: E-commerce websites (Amazon, Flipkart, Shopify) where customers choose different payment methods.
- Sorting Algorithms
You can swap between different sorting strategies depending on the situation (performance, dataset size, etc.).
interface SortStrategy {
public function sort(array $data): array;
}
class BubbleSort implements SortStrategy {
public function sort(array $data): array {
// fake bubble sort
sort($data);
return $data;
}
}
class QuickSort implements SortStrategy {
public function sort(array $data): array {
// fake quick sort
rsort($data);
return $data;
}
}
class SortContext {
private SortStrategy $strategy;
public function __construct(SortStrategy $strategy) {
$this->strategy = $strategy;
}
public function execute(array $data): array {
return $this->strategy->sort($data);
}
}
// β
Usage
$data = [5, 1, 4, 2];
echo implode(", ", (new SortContext(new BubbleSort()))->execute($data));
π Use case: Data processing tools, libraries, or apps needing pluggable sorting.
- Compression (Zip, Rar, Tar)
You may need different compression formats.
interface CompressionStrategy {
public function compress(string $file): string;
}
class ZipCompression implements CompressionStrategy {
public function compress(string $file): string {
return "Compressing $file using ZIP";
}
}
class RarCompression implements CompressionStrategy {
public function compress(string $file): string {
return "Compressing $file using RAR";
}
}
class TarCompression implements CompressionStrategy {
public function compress(string $file): string {
return "Compressing $file using TAR";
}
}
class Compressor {
private CompressionStrategy $strategy;
public function __construct(CompressionStrategy $strategy) {
$this->strategy = $strategy;
}
public function compress(string $file): string {
return $this->strategy->compress($file);
}
}
// β
Usage
echo (new Compressor(new RarCompression()))->compress("backup.sql");
π Use case: Backup software, file sharing platforms.
- Travel/Navigation (Google Maps Example)
Different travel modes: car, bike, walking, train.
interface RouteStrategy {
public function buildRoute(string $from, string $to): string;
}
class CarRoute implements RouteStrategy {
public function buildRoute(string $from, string $to): string {
return "Driving from $from to $to";
}
}
class BikeRoute implements RouteStrategy {
public function buildRoute(string $from, string $to): string {
return "Cycling from $from to $to";
}
}
class WalkRoute implements RouteStrategy {
public function buildRoute(string $from, string $to): string {
return "Walking from $from to $to";
}
}
class Navigator {
private RouteStrategy $strategy;
public function __construct(RouteStrategy $strategy) {
$this->strategy = $strategy;
}
public function navigate(string $from, string $to): string {
return $this->strategy->buildRoute($from, $to);
}
}
// β
Usage
echo (new Navigator(new BikeRoute()))->navigate("Home", "Park");
π Use case: Google Maps, Uber, delivery route planners.
Top comments (0)