设计模式是在软件开发中被广泛验证的解决方案,它能帮助我们构建出可维护、可扩展且高复用的代码结构。在 PHP 中应用设计模式,不仅能提升代码质量,还能让系统在面对复杂业务需求时更具弹性。
设计模式一般分为三类:创建型、结构型和行为型。每一类都有不同的侧重点与使用场景。
创建型模式用于封装对象的创建过程,使代码与具体类解耦。常见的创建型模式包括:
结构型模式关注类与对象之间的组合方式,旨在让系统更加灵活与易维护。常见的结构型模式包括:
行为型模式用于描述对象之间的通信方式及职责分配。主要模式包括:
以下示例展示了设计模式在购物车系统中的实际应用,包括工厂模式、代理模式和策略模式。
interface DiscountServiceFactory {
public static function create(): DiscountService;
}
class NormalDiscountService implements DiscountService {
// ...
}
class PremiumDiscountService implements DiscountService {
// ...
}
class DiscountServiceFactoryImpl implements DiscountServiceFactory {
public static function create(): DiscountService {
if (isPremiumCustomer()) {
return new PremiumDiscountService();
}
return new NormalDiscountService();
}
}
通过工厂模式,我们可以灵活地根据用户类型创建不同的折扣服务实例,而不直接依赖具体类。
class CartLoggerProxy extends Cart {
private $logger;
public function __construct(Cart $cart, Logger $logger) {
parent::__construct();
$this->cart = $cart;
$this->logger = $logger;
}
public function addItem(Item $item): void {
parent::addItem($item);
$this->logger->log("Added item to cart");
}
// 其他方法可类似扩展
}
代理模式通过中间层(Proxy)增强了原有类的功能,如增加日志记录或权限控制。
interface DiscountStrategy {
public function calculateDiscount(Cart $cart): float;
}
class NoDiscountStrategy implements DiscountStrategy {
public function calculateDiscount(Cart $cart): float {
return 0;
}
}
class FlatDiscountStrategy implements DiscountStrategy {
private $discount;
public function __construct(float $discount) {
$this->discount = $discount;
}
public function calculateDiscount(Cart $cart): float {
return $cart->getTotal() * $this->discount;
}
}
// 应用策略
$context = new DiscountContext();
if (isPremiumCustomer()) {
$context->setStrategy(new PremiumDiscountStrategy());
} else {
$context->setStrategy(new NoDiscountStrategy());
}
$discount = $context->calculateDiscount();
策略模式让不同的折扣算法可以自由切换,从而提高了系统的灵活性与可扩展性。
设计模式不仅仅是编程技巧,更是一种思想。通过合理地运用工厂、代理和策略等模式,我们能够让 PHP 项目结构更加清晰、灵活,并在复杂场景下保持良好的可维护性。掌握这些模式,将为你的 PHP 开发之路奠定坚实的基础。