php模式设计之 策略模式

  • 策略模式:

策略模式设计帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法。

  • 使用场景:
    1. 例如有一个CD类,我们类存储了CD的信息。
    2. 原先的时候,我们在CD类中直接调用getCD方法给出XML的结果
    3. 随着业务扩展,需求方提出需要JSON数据格式输出
    4. 这个时候我们引进了策略模式,可以让使用方根据需求自由选择是输出XML还是JSON
  • 代码实例:

        <?php
        //策略模式
        //cd类
        class cd {
            protected $cdArr;  
    
            public function __construct($title, $info) {
                $this->cdArr[‘title‘] = $title;
                $this->cdArr[‘info‘]  = $info;
            }  
    
            public function getCd($typeObj) {
                return $typeObj->get($this->cdArr);
            }
        }  
    
        class json {
            public function get($return_data) {
                return json_encode($return_data);
            }
        }  
    
        class xml {
            public function get($return_data) {
                    $xml = ‘<?xml version="1.0" encoding="utf-8"?>‘;
                    $xml .= ‘<return>‘;
                        $xml .= ‘<data>‘ .serialize($return_data). ‘</data>‘;
                    $xml .= ‘</return>‘;
                    return $xml;
            }
        }  
    
        $cd = new cd(‘cd_1‘, ‘cd_1‘);
        echo $cd->getCd(new json);
        echo $cd->getCd(new xml);  
时间: 2024-10-05 04:45:04

php模式设计之 策略模式的相关文章

《JAVA与模式》之策略模式

策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.用一句话来说,就是:"准备一组算法,并将每一个算法封装起来,使得它们可以互换".下面就以一个示意性的实现讲解策略模式实例的结构. 这个

《JAVA与模式》之策略模式_转载

转自:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管

php模式设计之 工厂模式

承接上篇php模式设计之 单例模式,(虽然好像关系不大).今天讲述第二种基础的模式设计——工厂模式. 那么何为工厂模式? 从名字来看,似乎看不出什么端倪.工厂模式,和生产有关?还是和生产流程有关?难道还和工厂领导有关?和领导秘书有关?秘书...     好了不卖关子了,所谓工厂模式还真和生产有关.生产什么呢?生产出来的是一个实例对象.通过什么设备生产?通过一个工厂类生产.怎么生产呢?工厂类调用自身静态方法来生产对象实例. 工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而

学习大话设计模式02_工厂模式 进阶至 策略模式

1 /** 2 * 现金收费抽象类 3 * @author Monica 4 * 5 */ 6 public abstract class CashSuper { 7 /** 8 * 现金收取超类的抽象方法 9 * @param money 收取现金,参数为原价 10 * @return 返回当前价 11 */ 12 public abstract double acceptCash(double money); 13 } 14 15 /** 16 * 正常收费子类 17 * @author M

【设计模式】 模式PK:策略模式VS状态模式

1.概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下. 策略模式(左)和状态模式(右)的通用类图. 两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式.但根据两者的定义,我们发现两者的区别还是很明显的:策略模式封装的是不同的算法,算法之间没有交互,以达到算法可以自由切换的目的:而状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的.这两种模式虽然都有变换的行为,但

设计模式之行为型模式—— 3.1 策略模式

<?php /**  * 3.1 策略模式  * 定义:  *      它定义了算法家族,分别封装起来,让它们之间可以互相  *      替换,此模式让算法的变化,不会影响到使用算法的客户.  * 角色:  *      1. 抽象算法类  *      2. 具体算法类  *      3. 上下文类  * 优点:  *      1. 提供了挂历相关算法族的办法.策略类的等级结构定义  *         了一个算法或行为族.恰当的使用继承可以把公共的代  *         码转移到父

【设计模式】 模式PK:策略模式VS桥梁模式

1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样?完全一样!正是由于类似场景的存在才导致了两者在实际应用中经常混淆的情况发生,我们来举例说明两者有何差别. 大家都知道邮件有两种格式:文本邮件(TextMail)和超文本邮件(HTMLMaiL),在文本邮件中只能有简单的文字信息,而在超文本邮件中可以有复杂文字(带有颜色.字体等属性).图片.视频等,

(行为型模式七)策略模式

package com.eyugame.modle; /** * 策略模式 * @author JYC506 * */ /*策略一*/ public class Strategy1 implements IStrategy{ @Override public void show() { System.out.println("使用策略1"); } public static void main(String[] args) { Context context; /*使用策略一*/ co

深入浅出Java模式设计之模板方法模式

一.引子  这是一个很简单的模式,却被非常广泛的使用.之所以简单是因为在这个模式中仅仅使用到了继承关系. 继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子.“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”. 其实,继承还是有很多自身的优点所在.只是被大家滥用的似乎缺点更加明显了.合理的利用继承关系,还是能对你的系统设计起到很好的作用的.而模板方法模式就是其中的一个使用范例. 二.定义与结构 GOF给模板方法(Template M