(二十)职责链模式详解(都市异能版)

本文通过一个生动的故事介绍了职责链模式在实际生活中的应用,作者通过反思自己夜晚订餐的困扰,提出了如何利用职责链模式改进麦当劳订餐流程,减少客户的订餐难度。文章阐述了职责链模式的概念,类图结构,以及实施后的优点,旨在说明设计模式在实际问题解决中的价值。
摘要由CSDN通过智能技术生成

               作者: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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值