作者:zuoxiaolong8810(左潇龙),转载请注明出处。
凌晨两点,魔都某出租屋。
"God like."
.......
"Holy shit."
......
“哈哈。老子终于超神一次啦。”伴随着低音炮中一声怒吼,小左在自己十来平米的出租房里兴奋的尖叫起来。近了一看,原来小左操作的J8脸30分钟已经一身神装,如今正在疯狂的大杀四方。
“今晚杀的真爽,干脆通宵得了。”
依依不舍的退出了超神的一局,小左摸了摸自己像漏气了一样的肚子,喃喃的说道:“肚子有点饿了啊,这大半夜的可怎么办呢。”
“喂,你好,请问现在还送餐吗?”
“不好意思,先生,您的住址离我们太远,请您问一下其它分店。”
“问你妹啊,老子问了好几家了。”心里虽然不爽,小左嘴上还是很客气的说道:“嗯,好的,谢谢啊。”
.......
“喂,你好,请问你们往XXXX小区送餐吗?”
“嗯,是的。先生。”
小左心中一乐,“嗯,那好,我要一个XXX,一个XXX,一个XXX。”
“不好意思,先生,现在太晚了,我们的送餐时间已经过了。”
“我....去....你....妹啊。不送不早说。”心中暗骂了一句,小左直接挂了电话。
.......
“喂,你好,请问你们往XXXX小区送餐吗?”
“嗯,是的。先生。”
“嗯,那你们送餐时间没过吧。”有了上次的经验,小左没有先报菜单,而是先确认对方是否过了送餐时间。
“没有,先生。”
“嗯,那好,我要一个XXX,一个XXX,一个XXX。”
“不好意思,先生,这些都已经卖完了,您看您能换别的吗?”
“我....换你大爷.....”
半个小时过去了...
“哎呀妈呀,累死我了。终于找到一家送餐的了。这麦当劳号称24小时外卖是坑爹呢吧。”经过将近半个小时的折腾,小左终于找到一家比较合适的麦当劳分店,现在就只等着外卖送过来了。
“外卖估计半个小时就到了,这一会也开不了一局,干脆干点别的,等吃完饭再开始。”说着,小左便开始在网上找寻设计模式的内容,这一闲下来就研究设计模式的劲头,当真是不辱转生前程序猿的头衔。
“啊哈,职责连模式。看起来可以解决麦当劳订餐的问题啊,好好研究一下,给麦当劳老总提个建议,说不定赏我个几亿美金。哇哈哈。”还没开始研究,小左已经开始YY起来。
定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
“看这个定义,就是将一堆可以处理请求的对象连成一条链,然后一个一个试着处理请求。这好像是可以解决麦当劳订餐的问题的,我先来看看我刚才苦B的订餐过程是什么样子的。”
“首先应该有一个麦当劳的分店的类,它的主要功能是可以订餐。”
package com.chain;
import java.util.Collections;
import java.util.Map;
//麦当劳分店
public class McSubbranch {
private final static int MIN_DISTANCE = 500;//假设是500米以内送餐
private static int count;//类计数
private final int number;//分店号
private int x;//分店的横坐标,用于判断距离
private int y;//分店的纵坐标,用于判断距离
private Map<String, Integer> menu;//菜单
public McSubbranch(int x, int y, Map<String, Integer> menu) {
super();
this.x = x;
this.y = y;
this.menu = menu;
number = ++count;
}
public boolean order(int x,int y,Map<String, Integer> order){
//如果距离小于500米并且订单中的食物不缺货,则订单成功,否则失败
if (CommonUtils.getDistance(x, y, this.x, this.y) < MIN_DISTANCE && !CommonUtils.outOfStock(menu, order)) {
for (String name : order.keySet()) {
menu.put(