二十:职责链模式详解(类似于spring的hangler处理请求)
2020-12-13 04:00
标签:pack handle static chain img 定义 客户 getmenu 名称 定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 “看这个定义,就是将一堆可以处理请求的对象连成一条链,然后一个一个试着处理请求。这好像是可以解决麦当劳订餐的问题的,我先来看看我刚才苦B的订餐过程是什么样子的。” “首先应该有一个麦当劳的分店的类,它的主要功能是可以订餐。” “先来看看职责链模式的类图,这样比较好设计。” “类图还是比较简单的啊,有一个通用的接口,然后就是若干个具体的处理者。按照现在麦当劳的情况来说,接口里handleRequest方法其实就是order(订餐)方法了,而setSuccessor方法,则是用来设置职责链的下一个处理者。” “对于麦当劳的问题来说,每一个分店就是具体的处理者了,主要的改动应该是抽象出来一个接口以及职责链的连接过程,而刚才发送订单的时候是拆分成方法参数传递给订餐方法的,现在最好是把订单做成一个数据类。” “下面便应该是分店接口了,它有两个方法,和类图当中的方法类似,只是名称略有改变。” “下面便是麦当劳分店的实现类了,它主要的改变是添加了一个属性(下一个分店),这应该就是链形成的基石了。” “handleOrder方法中的逻辑就是职责链的精髓了,它会试图处理请求,如果处理不了,则交给链中的下一个分店。刚才用的CommonUtils应该不用变了。下面就看下有了职责链模式之后,我的订餐方式吧。” “输出结果和刚才是一样的,不过这下我订餐就好办多了,直接找第一家分店订餐就行,至于到最后谁给我送餐,我就不用管了。” 1、客户端与具体的处理者解耦,客户端只认识一个Hanlder接口,降低了客户端(即请求发送者)与处理者的耦合度。 2、客户端和处理者都不关心职责链的具体结构,而是交给职责链的创造者(在上述例子当中则是交给了OrderManager),也正因为如此,当在职责链中添加处理者的时候,这对客户端和处理者来说,都是透明的,二者不知道也不必要知道职责链的变化。 二十:职责链模式详解(类似于spring的hangler处理请求) 标签:pack handle static chain img 定义 客户 getmenu 名称 原文地址:https://www.cnblogs.com/2019lgg/p/11101225.htmlpackage com.chain;
import java.util.Map;
//订单类(相当于request,其实就是封装一个请求)
public class Order {
private int x;
private int y;
private Map
package com.chain;
//分店接口(相当于Hanlder)
public interface Subbranch {
void setSuccessor(Subbranch subbranch);
boolean handleOrder(Order order);
}
package com.chain;
import java.util.Collections;
import java.util.Map;
//麦当劳分店
public class McSubbranch implements Subbranch{
private final static int MIN_DISTANCE = 500;//假设是500米以内送餐
private static int count;//类计数
private final int number;//分店号
private int x;//分店的横坐标,用于判断距离
private int y;//分店的纵坐标,用于判断距离
private Map
package com.chain;
import java.util.HashMap;
import java.util.Map;
public class Client {
public static void main(String[] args) {
//假设初始菜单都是以下这些东西
Map
上一篇:用 Windows Live Writer完美发布新浪、网易、blogcn、blogbus、cnblogs
下一篇:Spyder提示ValueError: API 'QString' has already been set to version 1
文章标题:二十:职责链模式详解(类似于spring的hangler处理请求)
文章链接:http://soscw.com/essay/28731.html