ポリシーパターンは、実行時にアルゴリズムポリシーの動的な選択を可能にする行動設計パターンです。 PHPでは、ポリシーパターンを使用すると、ロジックデカップリングを効果的に実装し、コードの柔軟性と保守性を向上させることができます。このモデルは、オープンクロージングの原理、つまり拡張に開かれ、修正に閉じられていることに従います。
eコマースプラットフォームを採用すると、異なるレベルのユーザーは異なる割引戦略を享受します。通常のユーザーの割引はなく、VIPユーザーでは10%オフ、SVIPユーザーで20%オフです。ポリシーモデルを通じて、各価格設定戦略を独立したクラスにカプセル化して、管理と拡大を容易にすることができます。
abstract class PriceStrategy {
abstract public function calculatePrice($price);
}
異なるユーザーレベルについて、 Pricestrategyから継承された3つのクラスを作成します。
class RegularStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price;
}
}
class VipStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price * 0.9;
}
}
class SvipStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price * 0.8;
}
}
注文クラスは、ポリシーオブジェクトを設定することにより、柔軟な価格計算を実現します。
class Order {
private $priceStrategy;
public function setPriceStrategy(PriceStrategy $strategy) {
$this->priceStrategy = $strategy;
}
public function calculateTotalPrice($price) {
return $this->priceStrategy->calculatePrice($price);
}
}
ユーザーレベルに基づいてポリシークラスを動的に選択できます。
$order = new Order();
$regularStrategy = new RegularStrategy();
$order->setPriceStrategy($regularStrategy);
$regularPrice = $order->calculateTotalPrice(100); // 出力100
$vipStrategy = new VipStrategy();
$order->setPriceStrategy($vipStrategy);
$vipPrice = $order->calculateTotalPrice(100); // 出力90
$svipStrategy = new SvipStrategy();
$order->setPriceStrategy($svipStrategy);
$svipPrice = $order->calculateTotalPrice(100); // 出力80
ポリシーモデルを通じて、異なるビジネスルールが独立したクラスにカプセル化され、コアロジックをより明確にし、優れたスケーラビリティを実現します。新しいユーザーレベルのポリシーを追加する場合、既存のコードを変更せずに新しいポリシークラスを追加するだけです。
戦略モデルは、PHP開発における非常に実用的な設計モデルであり、行動の変化を伴うシステム設計に特に適しています。戦略モデルを合理的に使用することにより、コードの構造と保守性を効果的に改善し、システムの複雑さを低下させ、開発効率を改善できます。