介绍
shiyanlou:策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
角色
角色 | 说明 |
---|---|
Context | 环境类,使用一个 ConcreteStrategy 对象来配置;维护一个对 Stategy 对象的引用,同时,可以定义一个接口来让 Stategy 访问它的数据 |
Strategy | 抽象策略类,定义所有支持的算法的公共接口。Context 使用这个接口来调用某 ConcreteStrategy 定义的算法 |
ConcreteStrategy | 具体策略类,实现 Strategy 接口的具体算法 |
角色示例
类名 | 担任角色 | 说明 |
---|---|---|
Order | Context | 订单类 |
PayMethod | Strategy | 支付方式类 |
BankCard | ConcreteStrategy | 银行卡支付类 |
Huabei | ConcreteStrategy | 花呗支付类 |
YuEBao | ConcreteStrategy | 余额宝支付类 |
UML类图
WechatIMG12.jpeg代码
<?php
abstract class PayMethod
{
abstract function pay();
}
class BankCard extends PayMethod
{
public function pay()
{
return "更换银行卡支付".PHP_EOL;
}
}
class Huabei extends PayMethod
{
public function pay()
{
return "更换花呗支付".PHP_EOL;
}
}
class YuEBao extends PayMethod
{
public function pay()
{
return "更换余额宝支付".PHP_EOL;
}
}
class Order
{
protected $payMethod;
public function setPayMethod(PayMethod $payMethod)
{
$this->payMethod = $payMethod;
}
public function pay()
{
return $this->payMethod->pay();
}
}
$order = new Order();
$bankCard = new BankCard();
$yuEBao = new yuEBao();
$huabei = new Huabei();
$order->setPayMethod($bankCard);
echo $order->pay();
$order->setPayMethod($yuEBao);
echo $order->pay();
$order->setPayMethod($huabei);
echo $order->pay();
创建 Pay.php,内容如上。
执行
$ php Pay.php
更换银行卡支付
更换余额宝支付
更换花呗支付
网友评论