Les modèles de conception sont des solutions largement éprouvées dans le développement de logiciels, qui peuvent nous aider à créer des structures de code maintenables, évolutives et hautement réutilisables. L'application de modèles de conception dans PHP peut non seulement améliorer la qualité du code, mais également rendre le système plus flexible lorsqu'il est confronté à des besoins commerciaux complexes.
Les modèles de conception sont généralement divisés en trois catégories: type de création, type structurel et type de comportement. Chaque catégorie a des scénarios de mise au point et d'utilisation différents.
Le mode créatif est utilisé pour encapsuler le processus de création des objets, en découplant le code à partir de classes spécifiques. Les modèles de création courants comprennent:
Les modèles structurels se concentrent sur la combinaison des classes et des objets, visant à rendre le système plus flexible et facile à entretenir. Les modèles structurels communs comprennent:
Le mode comportemental est utilisé pour décrire les méthodes de communication et les responsabilités entre les objets. Les modes principaux comprennent:
Les exemples suivants montrent l'application pratique des modèles de conception dans les systèmes de paniers d'achat, y compris les modèles d'usine, les modèles d'agent et les modèles de politique.
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();
}
}
Grâce au modèle d'usine, nous pouvons créer des instances de service de réduction de manière flexible en fonction du type d'utilisateur sans s'appuyer directement sur des classes spécifiques.
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");
}
// D'autres méthodes peuvent être étendues de la même manière
}
Le mode proxy améliore les fonctions de la classe d'origine via la couche intermédiaire (proxy), comme l'ajout de journalisation ou de contrôle d'autorisation.
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;
}
}
// Appliquer la stratégie
$context = new DiscountContext();
if (isPremiumCustomer()) {
$context->setStrategy(new PremiumDiscountStrategy());
} else {
$context->setStrategy(new NoDiscountStrategy());
}
$discount = $context->calculateDiscount();
Le modèle de stratégie permet à différents algorithmes de réduction d'être commutés librement, améliorant ainsi la flexibilité et l'évolutivité du système.
Les modèles de conception ne sont pas seulement des compétences en programmation, mais aussi une sorte d'idée. En appliquant rationnellement les modèles d'usine, d'agent et de stratégie, nous pouvons rendre la structure du projet PHP plus claire et plus flexible, et maintenir une bonne maintenabilité dans des scénarios complexes. La maîtrise de ces modèles jettera une base solide pour votre parcours de développement PHP.