策略模式:
在龍?zhí)兜鹊貐^(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站建設(shè),龍?zhí)毒W(wǎng)站建設(shè)費(fèi)用合理。
策略模式我們無(wú)法通過(guò)字面意思來(lái)理解了:
首先,創(chuàng)建一個(gè)接口,定義子類(lèi)的實(shí)現(xiàn)規(guī)范;
第二步,根據(jù)不同的業(yè)務(wù)邏輯,書(shū)寫(xiě)不同的方法,同時(shí)實(shí)現(xiàn)第一步中的接口.
第三步,寫(xiě)一個(gè)獨(dú)立的類(lèi),其中有兩個(gè)方法,第一個(gè)為初始化(傳入第二步中的子類(lèi)的對(duì)象),第二個(gè)方法 為統(tǒng)一的執(zhí)行類(lèi)(當(dāng)然有了接口這個(gè)也可以省略了).
如下圖:
下面是一個(gè)完整的demo:
//通過(guò)接口定義子類(lèi)實(shí)現(xiàn)規(guī)范
interface Strategy{
public function echoInfo();
}
//實(shí)現(xiàn)方法,并且每個(gè)都用不同的業(yè)務(wù)邏輯(phper,javaer)
class Phper implements Strategy{
public function echoInfo()
{
echo "this is phper class";
}
}
class Javaer implements Strategy{
public function echoInfo()
{
echo "this is javaser class";
}
}
//建立一個(gè)獨(dú)立的類(lèi),通過(guò)其中的一個(gè)方法,傳入不同的對(duì)象來(lái)實(shí)現(xiàn)不同的處理過(guò)程
class Done{
//用來(lái)存儲(chǔ)實(shí)例化的對(duì)象
private $obj;
//通過(guò)傳入對(duì)象將對(duì)象賦給私有屬性
public function __construct(Strategy $obj)
{
$this->obj=$obj;
}
//通過(guò)統(tǒng)一的實(shí)現(xiàn)方法來(lái)實(shí)現(xiàn)不同的對(duì)象內(nèi)部的方法(因?yàn)橛薪涌诘南拗?這個(gè)也可以省略)
public function go()
{
$this->obj->echoInfo();
}
}
//實(shí)例化獨(dú)立的類(lèi),傳入不同的對(duì)象參數(shù)
$obj=new Done(new Javaer);
//輸出結(jié)果
$obj->go();
?>
策略模式一般用在一些輸出結(jié)果需要多樣話的地方,比如客戶可能導(dǎo)出excel表,也可能導(dǎo)出word文件,或者生成一個(gè)柱狀圖等等.