php设计模式之策略模式

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值