策略模式,定义若干策略类,客户端根据具体需求去使用相应的策略类。
使用场景如不同类型商品的打折力度、不同级别会员的优惠幅度、员工奖金等。
上代码:
<?php
interface Pay{
public function payMoney();
}
class WxPay implements Pay{
public function payMoney() {
echo 'Use weixin pay money. ';
}
}
class AliPay implements Pay{
public function payMoney() {
echo 'Use zhifubao pay money. ';
}
}
class Shop{
private $payInstance;
public function __construct(Pay $pay) {
$this->payInstance = $pay;
}
public function buyBook() {
$pay->payMoney();
}
}
//client
$wxpay = new WxPay();
$shop = new Shop($wxpay);
$shop->buyBook();
最后总结:
优点:
1. 实例更简洁,相比工厂模式简单易扩展
缺点:
1. 客户端需要自己确定选用哪种策略适合自己