初心者から熟練者までの PHP デザイン パターン

王林
リリース: 2024-05-07 15:45:02
オリジナル
947 人が閲覧しました

デザイン パターンは、保守可能、スケーラブル、再利用可能なコードを作成するための PHP の実績のあるソリューションです。基本的なデザイン パターンは、クリエイティブ、構造、動作に分類できます。実際のケースでは、ファクトリ パターンを使用した割引サービス オブジェクトの作成、プロキシ パターンを使用したショッピング カートへのログ機能の追加、戦略パターンによるさまざまな割引計算の実装など、ショッピング カート システムにおける設計パターンの適用を示します。

PHP 设计模式从入门到精通

PHP デザイン パターン: 初心者から熟練者まで

はじめに

デザイン パターンは、一般的なプログラミングの問題を解決するための実績のあるコーディング ソリューションです。 PHP では、デザイン パターンは、保守可能、拡張可能、再利用可能なコードを作成するのに役立ちます。

基本デザインパターン

クリエイティブパターン: オブジェクトを作成するためのメカニズムを提供します。

  • ファクトリ パターン: 具象クラスを直接指定せずにオブジェクトを作成します。
  • シングルトン パターン: クラスがインスタンスを 1 回だけ作成するようにします。

構造パターン: クラスとオブジェクト間の関係を定義します。

  • アダプターモード: 互換性のないインターフェースの連携を許可します。
  • プロキシ パターン: オブジェクトへの透過的なアクセスを提供します。
  • デコレーターパターン: 既存のオブジェクトに新しい機能を動的に追加します。

行動パターン: オブジェクトがどのように通信し、連携するかを定義します。

  • オブザーバーパターン: パブリッシュ/サブスクライブメカニズム用。
  • 戦略モード: 実行時にアルゴリズムを変更できます。
  • テンプレート メソッド パターン: アルゴリズム フレームワークを定義し、サブクラスがステップをカスタマイズできるようにします。

実際のケース: ショッピング カート

次のクラスを含むショッピング カート システムを考えてみましょう:

  • Cart: 購入した商品を保管するショッピング カートを表します。 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();
  }
}
ログイン後にコピー

使用代理模式为 CartItem: ショッピング カート内の 1 つの項目を表します。

DiscountService: 割引を計算するためのインターフェイスを提供します。

ファクトリーパターンを使用して 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");
  }

  // 其他方法类似处理
}
ログイン後にコピー

プロキシパターンを使用して 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();
ログイン後にコピー
🎜🎜 戦略を通じてさまざまな成果を達成しますパターンの割引計算: 🎜🎜rrreee🎜🎜結論🎜🎜🎜 デザインパターンを使用することで、エレガントで柔軟で保守しやすい PHP コードを作成できます。この記事で紹介した基本的な設計パターンは、プログラミングの幅広い課題を解決し、高品質のソフトウェアを構築するのに役立ちます。 🎜

以上が初心者から熟練者までの PHP デザイン パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!