策略的定义就是将一组特定行为和算法封装成类,以适应某些特定上下文环境。常见电商网站会针对男女用户各自跳转不同商品类目、显示不同广告位。那么就准备两个策略类分别实现相同方法,抽象策略角色
策略模式是一种简单常见的模式。作为一个有计谋的模式,策略就是个墙头草,见人说人话、见鬼说鬼话。中学课文里田忌赛马的故事,孙子对田忌说:今以君之下驷与彼上驷,取君上驷与彼中驷,取君中驷与彼下驷。这就体现了一种策略。
三国演义这本书陪伴了整个苦逼的高中生涯,桃园结义、三英战吕布、煮酒论英雄等等故事情节现在依旧记忆犹新。其中有个章节诸葛亮三气周瑜,刘备借荆州一借不还,孙权为了夺回荆州,周瑜便献计假意招刘备为东吴女婿借机扣下作为人质,诸葛亮识破计谋,于是在刘备去东吴招亲之前,特将三个锦囊妙计交给赵云依次解决遇到的问题。这三个妙计分别是:1、找乔国老帮忙 2、向吴国太求情 3、让孙夫人断后。这三个计谋是告诉赵云如何执行,具体执行什么内容,每个计谋当然不同了,三个妙计应该实现的是同一个接口,引入策略模式
interface IStrategy
{
/**
* 每个锦囊妙计都是一个可执行的算法
*/
public function operate();
}
//三个锦囊实现类
class Qiao implements IStrategy
{
public function operate()
{
// TODO: Implement operate() method.
}
}
class Wu implements IStrategy
{
public function operate()
{
// TODO: Implement operate() method.
}
}
class Sun implements IStrategy
{
public function operate()
{
// TODO: Implement operate() method.
}
}
class Strategy
{
protected $strategy;
function setStrategy(\Common\ExampleOne\IStrategy $strategy)
{
$this->strategy = $strategy;
}
public function operate()
{
$this->operate();
}
}