介绍
策略模式是一种设计模式,它提供了一种灵活的方法来定义一组算法,并将其封装在一个独立的类中,使得其可以互相替换。通俗点说,策略模式就是把一系列的算法封装成独立的类,让它们可以相互替换,从而达到灵活地改变对象的行为的目的。策略模式在实际应用中比较常见,例如排序算法、加密算法、路由算法等都可以使用策略模式来实现。
角色
角色 | 说明 |
---|---|
Context | 环境类,使用一个 ConcreteStrategy 对象来配置;维护一个对 Stategy 对象的引用,同时,可以定义一个接口来让 Stategy 访问它的数据 |
Strategy | 抽象策略类,定义所有支持的算法的公共接口。Context 使用这个接口来调用某 ConcreteStrategy 定义的算法 |
ConcreteStrategy | 具体策略类,实现 Strategy 接口的具体算法 |
角色示例
在支付系统中,支付方式就是一个典型的应用场景,不同的支付方式可以通过不同的算法来实现,例如银行卡支付、花呗支付、余额宝支付等等。
类名 | 担任角色 | 说明 |
---|---|---|
Order | 环境 | 订单类 |
PayMethod | 抽象策略 | 支付方式类 |
BankCard | 具体策略 | 银行卡支付类 |
Huabei | 具体策略 | 花呗支付类 |
YuEBao | 具体策略 | 余额宝支付类 |
代码
1 | <?php |
创建 Pay.php,内容如上。
执行
1 | $ php Pay.php |