当前位置: 首页 > news >正文

做境外的赌博网站违法么兰州做网站的公司

做境外的赌博网站违法么,兰州做网站的公司,上海市建设安全协会网站查询考试,想自己做淘宝有什么网站吗1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求&…

1. 什么是责任链模式

责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下:

  • 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。
  • 将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。
    在这里插入图片描述

2. 责任链模式的作用

  • 将请求和请求的处理进行解耦,提高代码的可扩展性。

3. 责任链模式的结构

在这里插入图片描述

责任链模式主要包含以下角色:

  • 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接(链上的每个处理者都有一个成员变量来保存对于下一处理者的引用)。
  • 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
  • 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

在实际开发中,责任链模式可能会增加一个责任链管理者来管理具体的处理者。

4. 责任链模式在实际开发中的应用

在 SpringBoot 中,责任链模式的实践方式有多种,以下是一种示例:一个下单流程的多个独立检查逻辑。
在这里插入图片描述

4.1 实现方式1
  1. 创建 Pojo, 下单对象
public class OrderContext {private String seqId;private String userId;private Long skuId;private Integer amount;private String userAddressId;// Getters and setters
}
  1. 创建处理者接口
public interface OrderHandleIntercept {int sort();OrderContext handle(OrderContext context);
}
  1. 创建具体处理者类
@Component
public class RepeatOrderHandleInterceptService implements OrderHandleIntercept {@Overridepublic int sort() {return 1; // 执行顺序为 1}@Overridepublic OrderContext handle(OrderContext context) {System.out.println("通过seqId,检查客户是否重复下单");return context;}
}@Component
public class ValidOrderHandleInterceptService implements OrderHandleIntercept {@Overridepublic int sort() {return 2; // 执行顺序为 2}@Overridepublic OrderContext handle(OrderContext context) {System.out.println("检查请求参数是否合法,并且获取客户的银行账户");return context;}
}@Component
public class BankOrderHandleInterceptService implements OrderHandleIntercept {@Overridepublic int sort() {return 3; // 执行顺序为 3}@Overridepublic OrderContext handle(OrderContext context) {System.out.println("检查银行账户是否合法,调用银行系统检查银行账户余额是否满足下单金额");return context;}
}
  1. 处理器链类
@Component
public class OrderHandleChainService implements ApplicationContextAware {private List<OrderHandleIntercept> handleList = new ArrayList<>();@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {Map<String, OrderHandleIntercept> serviceMap = applicationContext.getBeansOfType(OrderHandleIntercept.class);handleList = serviceMap.values().stream().sorted(Comparator.comparing(OrderHandleIntercept::sort)).collect(Collectors.toList());}public OrderContext execute(OrderContext context) {for (OrderHandleIntercept handleIntercept : handleList) {context = handleIntercept.handle(context);}return context;}
}
  1. 进行单元测试
@Autowired
private OrderHandleChainService orderHandleChainService;@Test
public void test02() {orderHandleChainService.execute(new OrderContext());
}
  1. 执行结果
通过seqId,检查客户是否重复下单
检查请求参数是否合法,并且获取客户的银行账户
检查银行账户是否合法,调用银行系统检查银行账户余额是否满足下单金额
4.2 实现方式2

通过注解 @Order 来指定排序

@Order(1)
@Component
public class RepeatOrderHandleInterceptService implements OrderHandleIntercept {//...省略
}@Order(2)
@Component
public class ValidOrderHandleInterceptService implements OrderHandleIntercept {//...省略
}@Order(3)
@Component
public class BankOrderHandleInterceptService implements OrderHandleIntercept {//...省略
}

修改 OrderHandleChainService

@Component
public class OrderHandleChainService {@Autowiredprivate List<OrderHandleIntercept> handleList;public OrderContext execute(OrderContext context) {for (OrderHandleIntercept handleIntercept : handleList) {context = handleIntercept.handle(context);}return context;}
}
4.3 实现方式3

通过定义抽象类来实现责任链设计模式

public abstract class AbstractOrderHandle {private AbstractOrderHandle next;public AbstractOrderHandle getNext() {return next;}public void setNext(AbstractOrderHandle next) {this.next = next;}public abstract OrderContext handle(OrderContext orderContext);public OrderContext execute(OrderContext context) {context = handle(context);if (getNext() != null) {getNext().execute(context);}return context;}
}

分别创建处理类

@Component
@Order(1)
public class RepeatOrderHandle extends AbstractOrderHandle {@Overridepublic OrderContext handle(OrderContext context) {System.out.println("通过seqId,检查客户是否重复下单");return context;}
}@Component
@Order(2)
public class ValidOrderHandle extends AbstractOrderHandle {@Overridepublic OrderContext handle(OrderContext context) {System.out.println("检查请求参数,是否合法,并且获取客户的银行账户");return context;}
}@Component
@Order(3)
public class BankOrderHandle extends AbstractOrderHandle {@Overridepublic OrderContext handle(OrderContext context) {System.out.println("检查银行账户是否合法,调用银行系统检查银行账户余额是否满足下单金额");return context;}
}

创建一个责任链管理器

@Component
public class OrderHandleManager {@Autowiredprivate List<AbstractOrderHandle> orderHandleList;@PostConstructpublic void initChain() {int size = orderHandleList.size();for (int i = 0; i < size; i++) {if (i == size - 1) {orderHandleList.get(i).setNext(null);} else {orderHandleList.get(i).setNext(orderHandleList.get(i + 1));}}}public OrderContext execute(OrderContext context) {OrderContext execute = orderHandleList.get(0).execute(context);return context;}
}

测试

@Autowired
private OrderHandleManager orderHandleManager;@Test
public void test02() {orderHandleManager.execute(new OrderContext());
}

运行结果与预期一致:

通过seqId,检查客户是否重复下单
检查请求参数,是否合法,并且获取客户的银行账户
检查银行账户是否合法,调用银行系统检查银行账户余额是否满足下单金额

5. 职责链模式总结

职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。这种模式为请求的处理提供了一条清晰的链,每个对象可以决定是否处理该请求或者将请求转发给链中的下一个对象。

职责链模式的优点:

  1. 降低耦合度:发送者和接收者之间没有直接的联系,降低了系统组件之间的耦合度。
  2. 增强灵活性:可以在运行时动态地添加或移除职责链中的处理对象,提高了系统的灵活性和可扩展性。
  3. 明确责任分配:每个处理对象只关注自己的职责范围,责任分配更加明确。

职责链模式的缺点:

  1. 请求处理不确定性:不能保证请求一定会被处理,如果链中的所有对象都不处理请求,请求将被忽略。
  2. 系统性能影响:请求可能需要通过较长的链进行传递,可能会对性能产生影响。
  3. 客户端复杂性增加:客户端可能需要了解整个职责链的配置,增加了客户端的使用复杂性。

职责链模式的使用场景:

  1. 多个对象处理请求:当一个请求需要多个对象依次处理时,可以使用职责链模式。
  2. 处理逻辑不明确:在运行时根据请求的类型动态选择处理对象,不希望客户端知道具体的处理逻辑。

职责链模式的实现可以通过组合多个具体处理者对象,并设置它们的后继者,形成一个处理链。当请求发出时,链中的每个对象依次判断是否能够处理该请求,如果可以处理则执行处理操作,否则将请求转发给链中的下一个对象。

这种模式在实际应用中非常广泛,例如在GUI应用程序的事件处理、工作流审批流程、过滤器链等场景中都有应用。通过使用职责链模式,可以提高系统的模块化和灵活性,同时降低组件之间的依赖关系。

http://www.15wanjia.com/news/41560.html

相关文章:

  • 网站开发的选题意义及背景百度seo算法
  • 网站正在建设中mp4旺道seo软件技术
  • 仿站网站营销策略是什么
  • 网站开发中涉及的两种服务器优化大师下载安装免费
  • 开学第一课汉字做网站全自动推广引流软件
  • 如何用xampp做网站怎么免费建公司网站
  • 淘宝网站建设 推广 上海百度app 浏览器
  • 长沙市模板网站竞价托管推广代运营
  • 荣成市有做网站的吗优化什么意思
  • wordpress密码看文章seo站外推广
  • 网站怎么做排行榜中国世界排名
  • 郑州交友网站建设网上商城建设
  • 单位网站的建设信息流优化师工作内容
  • wordpress公安备案号seo自然优化排名
  • wordpress antivirus沧州网站推广优化
  • 建网站和建网店的区别厦门网站推广优化哪家好
  • 表白制作网站整合营销案例举例说明
  • github搭wordpress肇庆seo排名外包
  • 广饶网站建设seo是什么意思广东话
  • 用python做网站的步骤admin5站长网
  • 现在还做自适应网站互联网推广员是做什么
  • 建设银行网站事件营销的概念
  • 手机网站 微信网站新闻头条今日新闻60条
  • 南京企业网站做优化如何网上销售自己的产品
  • 商业网站定义合肥网络推广优化公司
  • 广西柳州做网站友情链接怎么连
  • 微商平台怎么注册广州网站优化价格
  • 怎么做网站的需求seo排名优化有哪些
  • 做外贸网站怎么样电子商务培训
  • 邯郸网站建设唯辛ls15227百度站长平台工具