策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为。在PHP中应用策略模式可以让你轻松地根据需要选择和交换算法或策略,而无需修改使用这些算法的代码。
策略接口(Strategy Interface):定义所有支持的策略或行为的公共接口。这通常是一个抽象类或接口。
具体策略(Concrete Strategies):实现了策略接口的具体类,每一个类封装了一种具体的算法或行为。
上下文(Context):持有一个策略对象的引用,通过上下文可以调用策略对象的算法。上下文不直接决定使用哪种策略,而是通过构造函数、设置器等方法传递进来。
假设我们要实现一个简单的支付系统,其中包含多种支付策略(如支付宝、微信支付、银行卡支付)。
- interface PaymentStrategy {
- public function pay($amount);
- }
- class AlipayStrategy implements PaymentStrategy {
- public function pay($amount) {
- echo "Paid $amount using Alipay.\n";
- }
- }
-
- class WechatPayStrategy implements PaymentStrategy {
- public function pay($amount) {
- echo "Paid $amount using Wechat Pay.\n";
- }
- }
-
- class BankCardStrategy implements PaymentStrategy {
- public function pay($amount) {
- echo "Paid $amount using Bank Card.\n";
- }
- }
- class PaymentContext {
- protected $strategy;
-
- public function __construct(PaymentStrategy $strategy) {
- $this->strategy = $strategy;
- }
-
- public function executePayment($amount) {
- $this->strategy->pay($amount);
- }
- }
- // 客户端可以根据需要选择支付策略
- $context = new PaymentContext(new AlipayStrategy());
- $context->executePayment(100);
-
- // 动态切换支付策略
- $context = new PaymentContext(new WechatPayStrategy());
- $context->executePayment(200);