php设计模式之策略模式

来源:互联网 发布:淘宝电脑版登录链接 编辑:程序博客网 时间:2024/06/06 20:18

1.定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,称为策略模式
2. 使用策略模式可以实现ioc(控制反转),降低依赖注入
3. 如下面这个例子,如果不使用策略类,那么我们会使用if else或者switch这种控制结构来判断吃的食物,从而调用所选食物的处理方法,当我们增加一种食物时,需要对原本的代码新增加一个判断逻辑,此种方式我们称之为硬编码,应该避免

<?php/** *  * @authors mtg * @date    2015-08-07 15:00:54 *//*** 策略接口类:具体策略类需要实现其中的方法*/interface Eat{    public function eat();}/*** 具体策略类:吃米饭*/class eatRice implements Eat        {    public function eat()    {        echo "eat rice";    }}/*** 具体的策略类:吃面包*/class eatBread implements Eat{    public function eat()    {        echo "eat bread";    }}/*** 具体的策略类:吃面条*/class eatNoodles implements Eat{    public function eat()    {        echo "eat noodles";    }}/*** 策略解决类: 以提供客户选择使用何种解决方案: */class ChooseEat{    private $strategy=null;    public function __construct(Eat $eat)    {                       $this->strategy=$eat;    }   public function eat_food()                  {    $this->strategy->eat();   }   public function set_eat_strategy(Eat $eat)   {    $this->strategy=$eat;   }}$chooseEat=new ChooseEat(new eatBread());$chooseEat->eat_food();//eat bread

与工厂类的区别:
工厂模式是创建型模式 ,它关注对象创建,提供创建对象的接口. 让对象的创建与具体的使用客户无关。
策略模式是对象行为型模式 ,它关注行为和算法的封装 。它定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。使得算法可独立于使用它的客户而变化

0 0
原创粉丝点击