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

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

你可能感兴趣的:(设计模式,PHP,策略模式)