• [转载]木老师教笨笨课堂——系列讲座(从函数指针到委托)一 问题的由来


    木老师教笨笨课堂——系列讲座(从函数指针到委托)
    作者:李响 王双
    本文示例在Visual C++ 6.0和 Visual Stdio2005下编译测试通过。
    一、问题的由来
    程序世界里面经常干的一件事情是模块A给模块B输入若干个参数,然后经过处理再输出一个结果返回给模块A。一般情况下A只需要把应该输入的参数准备好,然后等着模块B完成剩下的工作。可是有些时候B无法完成所有的工作需要获得A的帮助或者在完成工作的过程中他需要告诉A“我完成到什么地步”。这种特殊情况似乎很少见,其实不然。
    比如,我去火车站买票,我告诉售票员我需要9月24日郑州到北京的火车票,售票员会告诉我有如下几种车票:
    郑州到北京和谐号
    6:54am——11:58am
    213元
    郑州到北京的快车
    7:30am——14:50pm
    94元
    郑州到北京的K180
    10:58pm——第二天6:30am
    175元
    .......
     
     
    如果我想很快到达见我女朋友,我需要选择和谐号,如果我想尽可能的便宜可能会选择票价为94元的快车,如果我想不耽误白天的工作,则我可能选择睡一晚上到达等等。根据具体要求的不同我会选择最佳的车票。这个实际问题如何用程序语言描述呢?
    模块A My 传参数 Time——2007年9月24日 Start City——郑州 End City——北京
    模块B Ticket Seller 返回结果:一张合适的郑州到北京的火车票
    这里很显然 模块A传给B的参数是不够的,实际情况是售票员会询问:“尊敬的顾客同志,今天从郑州到北京的火车票有和谐号、快车和晚上的K180,请问你要哪一张?”(当然售票员也可能说:“要哪一趟?啊 不知道,查清楚了再过来买,下一位”)。
    模块和模块之间的通信确无法做到实际人与人这样的交流。因此A还需要传给B一个如何选择的依据。当然A可以传一个“我要见女朋友”,“我要省钱买房”或者“我要睡一觉”这样的参数。这可以用一个整数来表示,比如1表示“我要见女朋友”,2表示“我要省钱麦房”或者“我要睡一觉”。B在处理过程当中
    B(Time,StartCity,EndCity,MyBestChoice)
    switch(MyBestChoice)
    {
    case 1:
           return “郑州到北京和谐号”;
    case 2:
    return “郑州到北京的快车”;
    case 3:
    return “郑州到北京的K180”;
    default:
           return “想清楚再来买,下一位”;
    }
     
    例1-1
    问题似乎得到解决了,可是我的票买好了,而下一位想在北京转车去长春,下下一位需要中午回去给老婆弄饭。于是售票员的Swich....case越来越庞大(难怪售票员阿姨有时候心情不好 也真难为她们了。)于是售票员没有办法了,说:“你们给我一个选择的依据吧”。于是B变成为:
    B(Time,StartCity,EndCity,MyBestChoice
    {
    // step1找到所有满足条件的票
    // step2
    bestTicket = MyBestChoice(Ticket[] ticket);
    }
    例1-2
    这里的MyBestChoice不再是一个简单的数,更确切地说他是一个行为而不是简单的数据。
    吁!为了通俗形象,真是费劲啊。
    在C语言里 行为我们往往是用函数表示,而这个行为和一般的行为不同 他是由模块B反过来调用模块A,因此称之为回调(call back)函数。
  • 相关阅读:
    DevExpress v17.2新版亮点—.NET Reporting篇(二)
    用MyEclipse JPA创建项目(二)
    DevExpress v17.2新版亮点—.NET Reporting篇(一)
    用MyEclipse JPA创建项目(一)
    HashMap底层实现原理
    Java 8 Tutorial
    剖析面试最常见问题之Java集合框架
    Java中String类的常用方法
    properties类以及.properties文件的使用
    递归
  • 原文地址:https://www.cnblogs.com/smwikipedia/p/1384402.html
Copyright © 2020-2023  润新知