策略的定義就是將一組特定行為和算法封裝成類,以適應(yīng)某些特定上下文環(huán)境。常見(jiàn)電商網(wǎng)站會(huì)針對(duì)男女用戶各自跳轉(zhuǎn)不同商品類目、顯示不同廣告位。那么就準(zhǔn)備兩個(gè)策略類分別實(shí)現(xiàn)相同方法,抽象策略角色
策略模式是一種簡(jiǎn)單常見(jiàn)的模式。作為一個(gè)有計(jì)謀的模式,策略就是個(gè)墻頭草,見(jiàn)人說(shuō)人話、見(jiàn)鬼說(shuō)鬼話。中學(xué)課文里田忌賽馬的故事,孫子對(duì)田忌說(shuō):今以君之下駟與彼上駟,取君上駟與彼中駟,取君中駟與彼下駟。這就體現(xiàn)了一種策略。
三國(guó)演義這本書(shū)陪伴了整個(gè)苦逼的高中生涯,桃園結(jié)義、三英戰(zhàn)呂布、煮酒論英雄等等故事情節(jié)現(xiàn)在依舊記憶猶新。其中有個(gè)章節(jié)諸葛亮三氣周瑜,劉備借荊州一借不還,孫權(quán)為了奪回荊州,周瑜便獻(xiàn)計(jì)假意招劉備為東吳女婿借機(jī)扣下作為人質(zhì),諸葛亮識(shí)破計(jì)謀,于是在劉備去東吳招親之前,特將三個(gè)錦囊妙計(jì)交給趙云依次解決遇到的問(wèn)題。這三個(gè)妙計(jì)分別是:1、找喬國(guó)老幫忙 2、向吳國(guó)太求情 3、讓孫夫人斷后。這三個(gè)計(jì)謀是告訴趙云如何執(zhí)行,具體執(zhí)行什么內(nèi)容,每個(gè)計(jì)謀當(dāng)然不同了,三個(gè)妙計(jì)應(yīng)該實(shí)現(xiàn)的是同一個(gè)接口,引入策略模式
interface IStrategy
{
/**
* 每個(gè)錦囊妙計(jì)都是一個(gè)可執(zhí)行的算法
*/
public function operate();
}
//三個(gè)錦囊實(shí)現(xiàn)類
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();
}
}