何為策略?
策略涣脚,就是計(jì)策示辈,謀略,是根據(jù)具體狀況而采取的措施遣蚀,在設(shè)計(jì)模式中顽耳,就是封裝起來(lái)的算法實(shí)現(xiàn)。在程序設(shè)計(jì)過(guò)程妙同,針對(duì)不同階段的需求射富,我們往往需要去增加或者減少策略或調(diào)整策略,接下來(lái)就來(lái)介紹策略模式是如何提高代碼靈活性的粥帚。
策略模式教你追女生
? 老樣子胰耗,還是舉個(gè)栗子來(lái)說(shuō)明。假設(shè)小明是一所工科大學(xué)學(xué)生芒涡,很想有女朋友柴灯,于是想到隔壁美女如云的高校追女生,我們也知道追女生的話不同的女生追法是不一樣的费尽,當(dāng)你遇到不同的女生的時(shí)候需要靈活地調(diào)整追的方法赠群。
? ? ? ?為了運(yùn)用策略模式來(lái)追女生,我們先定義一個(gè)抽象策略類HiGirlStrategy類旱幼,代碼如下:
? ? ? ? ?abstract class HiGirlStrategy{
? ? ? ? ? ? abstract function getHerHeart();
}
接著定義具體的策略類
追內(nèi)向型的女生查描,我們有策略1
class strategy1 extends HiGirlStategy{
function getHerHeart(){
? ? ? ?echo “追內(nèi)向型女生的策略”;
}
}
追外向型的女生,我們有策略2
class strategy2 extends HiGirlStategy{
function getHerHeart(){
echo “追外向型女生的策略”;
}
}
有了策略之后柏卤,我們便可以根據(jù)遇到的女生的類型的不同來(lái)調(diào)整我們的策略了冬三。
定義一個(gè)追女生類
class getGirl{
? ? public $grilType;
? ?public $strategy;
? ?public function __construct($type){
? ? ? $this->girlType=$type;
? ? ? $this->setStrategy();
? ? ? }
? private function setStrategy(){
? ? ?switch($type){
? ? ? ? case'內(nèi)向型':$this->strategy=new strategy1();break;
? ? ? ? case'外向型':$this->strategy=new strategy2();break;
? ? ? ?}
public function getHerHeart(){
? ? ? $this->strategy->getHerHeart();
}
}
好了,現(xiàn)在我們就可以看小明如何泡妞了缘缚,當(dāng)小明遇到內(nèi)向型的女生時(shí):
$obj=new getGril('內(nèi)向型');
$obj->getHerHeart();
當(dāng)小明遇到外向型的女生時(shí):
$obj=new getGril('外向型');
$obj->getHerHeart();
? ?當(dāng)然女生的類型不止這兩種勾笆,如果后來(lái)小明遇到了理智型的女生,只需要添加一個(gè)對(duì)應(yīng)的具體策略類桥滨,然后在getGirl類中增加判斷即可窝爪,在客戶端的調(diào)用則只是在實(shí)例化getGirl對(duì)象時(shí)改一下初始化參數(shù)即可弛车。
好了,這便是策略模式蒲每。