Maison  >  Article  >  développement back-end  >  Modèles de conception PHP du débutant au compétent

Modèles de conception PHP du débutant au compétent

王林
王林original
2024-05-07 15:45:021026parcourir

Les modèles de conception sont des solutions éprouvées en PHP pour créer du code maintenable, évolutif et réutilisable. Les modèles de conception de base peuvent être divisés en créatifs, structurels et comportementaux. Des cas pratiques démontrent l'application de modèles de conception dans le système de panier d'achat, notamment l'utilisation du modèle d'usine pour créer des objets de service de remise, l'utilisation du modèle proxy pour ajouter des fonctions de journalisation au panier et la mise en œuvre de divers calculs de remise via le modèle de stratégie.

PHP 设计模式从入门到精通

Modèles de conception PHP : du débutant à la maîtrise

Introduction

Les modèles de conception sont des solutions de codage éprouvées pour résoudre les problèmes de programmation courants. En PHP, les modèles de conception nous aident à écrire du code maintenable, extensible et réutilisable.

Modèle de conception de base

Modèle créatif : Fournit un mécanisme pour créer des objets.

  • Factory Pattern : Créez des objets sans spécifier directement une classe concrète.
  • Modèle Singleton : Garantit qu'une classe ne crée une instance qu'une seule fois.

Modèle structurel : Définissez la relation entre les classes et les objets.

  • Mode Adaptateur : Permet aux interfaces incompatibles de fonctionner ensemble.
  • Proxy Pattern : Fournit un accès transparent aux objets.
  • Motif Décorateur : Ajoutez dynamiquement de nouvelles fonctionnalités aux objets existants.

Modèle comportemental : Définit la façon dont les objets communiquent et collaborent.

  • Modèle d'observateur : Pour le mécanisme de publication/abonnement.
  • Mode Stratégie : Permet de modifier l'algorithme au moment de l'exécution.
  • Modèle de méthode de modèle : Définissez le cadre de l'algorithme et autorisez les sous-classes à personnaliser les étapes.

Cas pratique : Panier d'achat

Considérons un système de panier d'achat, qui contient les classes suivantes :

  • Cart : Représente le panier, qui stocke les articles achetés. Cart:表示购物车,存储购买的物品。
  • Item:表示购物车中的单个物品。
  • DiscountService:提供计算折扣的接口。

使用工厂模式创建 DiscountService 对象:

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();
  }
}

使用代理模式为 CartArticle : Représente un seul article dans le panier.

DiscountService : Fournit une interface pour calculer les remises.

Utilisez le modèle d'usine pour créer l'objet DiscountService :

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");
  }

  // 其他方法类似处理
}

Utilisez le modèle de proxy pour ajouter une fonction de journalisation au Cart :

🎜
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();
🎜🎜Réalisez divers résultats grâce à la stratégie Calcul de la remise des modèles : 🎜🎜rrreee🎜🎜Conclusion🎜🎜🎜En utilisant des modèles de conception, nous pouvons créer du code PHP élégant, flexible et maintenable. Les modèles de conception de base présentés dans cet article peuvent nous aider à résoudre un large éventail de défis de programmation et à créer des logiciels de haute qualité. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn