国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Head First-策略模式

2019-11-15 02:02:05
字體:
來源:轉載
供稿:網友
Head First-策略模式

策略模式,什么是策略模式,定義了算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶。

下面我們就用鴨子來詮釋一下策略模式,鴨子有兩種行為呱呱叫和飛,但是并不是所有的鴨子都會呱呱叫和飛,所以我們把這兩個賦予變化的行為提取出來。

<?phpabstract class Duck{    public $flyBehavior;    public $quackBehavior;        public function __construct(){    }    public function performFly(){        $this->flyBehavior->fly();    }    public function performQuack(){        $this->quackBehavior->quack();    }    public function setFlyBehavior(FlyBehavior $fb){        $this->flyBehavior = $fb;    }    public function setQuackBehavior(QuackBehavior $qb){        $this->quackBehavior = $qb;    }    public function swim(){    }        abstract function display();}interface FlyBehavior{    public function fly();}class FlywithWings implements FlyBehavior{    public function fly(){        echo "i'm flying!/n";    }}class FlyNoWay implements FlyBehavior{    public function fly(){        echo "i can't fly./n";    }}class FlyRocketPowered implements FlyBehavior{    public function fly(){        echo "i'm flying with a rocket!/n";    }}interface QuackBehavior{    public function quack();}class Quack implements QuackBehavior{    public function quack(){        echo "quack!/n";    }}class MuteQuack implements QuackBehavior{    public function quack(){        echo "silence/n";    }}class MallardDuck extends Duck{    public function __construct(){        $this->quackBehavior = new Quack();        $this->flyBehavior = new FlyNoWay();    }    public function display(){        echo "i'm a real mallar duck/n";    }    }$duck = new MallardDuck;$duck->performFly();$duck->setFlyBehavior(new FlyRocketPowered);$duck->performFly();?>

 從上面的代碼可以看出我們把鴨子抽象出來,而飛行行為和呱呱叫行車以接口的形式,設計的原則是多用組合,少用繼承,用上面的寫法,相對彈性大點,不僅將算法封裝成類,更可以“在運行時動態的改變行為”,只要組合行為對象符合正確的接口標準即可。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平昌县| 黄陵县| 密云县| 博野县| 静乐县| 镇安县| 鄱阳县| 洛川县| 密云县| 吉首市| 固原市| 张家川| 巴青县| 个旧市| 长宁区| 兴义市| 烟台市| 开封县| 周宁县| 广灵县| 四川省| 鹤岗市| 泸水县| 林甸县| 南丰县| 玉门市| 黑龙江省| 彰化县| 云安县| 贺兰县| 资中县| 拜城县| 康马县| 迁安市| 汾西县| 营山县| 安岳县| 宁蒗| 东山县| 乡城县| 墨江|