冒号和他的学生们(连载12)——情景范式 - 编程入门网
Course course = cook.cook(order);
// 找一个空闲的服务员
waiter = findWaiter();
// 服务员上菜
waiter.serve(customer, course);
// 顾客开始享用
customer.eat(course);
}
// 顾客用餐完毕。。。
// 找一个空闲的收银员
Cashier cashier = findCashier();
cashier.charge(customer);
cashier.issueInvoice(customer);
// 找一个空闲的接待员
receptionist = findReceptionist();
receptionist.send(customer);
}
冒号和他的学生们(连载12)——情景范式(4)时间:2011-07-01 BlogJava 郑晖句号写毕又复查一遍,拍拍手上的粉笔灰,心满意足地走下台来。 叹号提意见:“我的厨工没派上用场,应该在厨师烹调前调用KitchenHand的prepareFood方法。” 问号挑出另外的毛病:“在for循环中,厨师、服务员和顾客的行为应该在不同的线程中,厨师不可能等服务员上完一道菜或顾客吃完一道菜后才做下一道。” “可能更复杂呢!”逗号也来凑热闹,“一位顾客点的几样菜可能分别由几位厨师同时做,每位厨师都在不同的线程中工作。” 引号更严谨:“还应有一个后台线程,让Waiter随时exchangePlate,让KitchenHand随时washDishes和clean,这样所有服务人员提供的服务都用上了。” 句号倒抽凉气:“估不到漏洞这么多,并发式真是无处不在啊。” 冒号指着引号:“刚才有人不满你的大厨职责过于简单,现在你来实现一下,也好显显技术含量。” 引号在台上摸了半天头,编出一段代码—— Class Cook { public Course cook(Order order) { // 根据菜单查食谱 Recipe recipe = lookupRecipe(order); // 找到食谱的烹调步骤 List<Instruction> instructions = recipe.getInstructions(); for (Instruction instruction : instructions) { follow(instruction); // 按食谱的指令操作 } } } “堂堂大厨原来是靠查食谱做菜的。”逗号揶揄道。 引号为难地说:“这不是在编程嘛,好端端的人脑,不得不去模拟电脑,完全搞倒了。” “要设计会烹调的机器人,兴许还真得这样呢。”冒号笑道,“不过由于各种菜式组合繁多,如果每种菜都配菜谱未免太庞杂,如何精简呢?” 句号建议:“菜式成千上万,烹调技法相对少许多,不妨以技法为主线。” “好主意!”冒号挑起大拇指,“如果把待加工的菜看作数据,技法看作算法,将数据与算法分离,以算法为中心,那是什么范式?” “泛型式!”大家异口同声。 “至此我们已涉及了过程式、对象式、并发式、函数式和泛型式。”引号如数家珍,“还差逻辑式、元编程和切面式了。” 冒号把目光转向逗号:“写菜单并不容易,如果客人不直接点菜,你的服务员如何向他推荐?” 逗号答:“最简单的方法是报菜名,并一一询问客人。” 冒号皱眉:“这样你是简单了:一个迭代就搞定,可客人也该发火了。” 逗号赶紧修正:“先询问客人的口味、忌讳等等,再向他建议一些菜式。” “这还差不多。”冒号眉头舒展开来,“考虑到客人的口味、忌讳等各有不同,餐馆的菜单也随时可能变化,如果把这些都硬编码(hardcode),代码将成为懒婆娘的裹脚 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |