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

昆明网站建设团队网站建设一般多少钱官网

昆明网站建设团队,网站建设一般多少钱官网,四川学校网站建设,一家专做土特产的网站责任链模式:优雅处理请求的设计艺术 引言 在软件开发的世界里,我们常常会遇到需要对请求进行一系列处理的场景。比如,一个电商系统中,订单从创建到最终完成交易,需要经过创建订单、付款、发货、确认收货、交易结束等…

责任链模式:优雅处理请求的设计艺术

引言

在软件开发的世界里,我们常常会遇到需要对请求进行一系列处理的场景。比如,一个电商系统中,订单从创建到最终完成交易,需要经过创建订单、付款、发货、确认收货、交易结束等多个步骤。如果将这些处理逻辑都耦合在一起,代码会变得复杂且难以维护。而责任链模式正是为解决这类问题而生,它能够让我们以一种优雅的方式来处理请求。

责任链模式概述

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求为止。在这个模式中,每个处理者都有一个引用指向下一个处理者,形成一个链条。当一个请求进入这个链条时,它会依次经过每个处理者,每个处理者可以选择处理该请求或者将其传递给下一个处理者。

责任链模式的结构

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

  1. 抽象处理者(Handler):定义了处理请求的接口,通常包含一个设置下一个处理者的方法和一个处理请求的抽象方法。
  2. 具体处理者(Concrete Handler):实现了抽象处理者的接口,负责处理请求或者将请求传递给下一个处理者。
  3. 客户端(Client):创建处理者链,并将请求发送给链中的第一个处理者。

责任链模式的实现

下面我们以一个简单的订单处理系统为例,来演示责任链模式的实现。

1. 定义订单类

class Order {private boolean isCreated;private boolean isPaid;private boolean isShipped;private boolean isReceived;private boolean isCompleted;public boolean isCreated() {return isCreated;}public void setCreated(boolean created) {isCreated = created;}public boolean isPaid() {return isPaid;}public void setPaid(boolean paid) {isPaid = paid;}public boolean isShipped() {return isShipped;}public void setShipped(boolean shipped) {isShipped = shipped;}public boolean isReceived() {return isReceived;}public void setReceived(boolean received) {isReceived = received;}public boolean isCompleted() {return isCompleted;}public void setCompleted(boolean completed) {isCompleted = completed;}@Overridepublic String toString() {return "Order{" +"isCreated=" + isCreated +", isPaid=" + isPaid +", isShipped=" + isShipped +", isReceived=" + isReceived +", isCompleted=" + isCompleted +'}';}
}

2. 定义抽象处理者类

abstract class OrderHandler {protected OrderHandler nextHandler;// 支持链式调用的设置下一个处理者的方法public OrderHandler setNextHandler(OrderHandler nextHandler) {this.nextHandler = nextHandler;return nextHandler;}public abstract void handleOrder(Order order);
}

3. 实现具体处理者类

// 创建订单处理者
class CreateOrderHandler extends OrderHandler {@Overridepublic void handleOrder(Order order) {if (!order.isCreated()) {System.out.println("创建订单...");order.setCreated(true);}Optional.ofNullable(nextHandler).ifPresent(x-> x.handleOrder(order));}
}// 付款处理者
class PaymentHandler extends OrderHandler {@Overridepublic void handleOrder(Order order) {if (order.isCreated() && !order.isPaid()) {System.out.println("付款...");order.setPaid(true);}Optional.ofNullable(nextHandler).ifPresent(x-> x.handleOrder(order));}
}// 发货处理者
class ShippingHandler extends OrderHandler {@Overridepublic void handleOrder(Order order) {if (order.isPaid() && !order.isShipped()) {System.out.println("发货...");order.setShipped(true);}Optional.ofNullable(nextHandler).ifPresent(x-> x.handleOrder(order));}
}// 确认收货处理者
class ConfirmReceiptHandler extends OrderHandler {@Overridepublic void handleOrder(Order order) {if (order.isShipped() && !order.isReceived()) {System.out.println("确认收货...");order.setReceived(true);}Optional.ofNullable(nextHandler).ifPresent(x-> x.handleOrder(order));}
}// 交易结束处理者
class TransactionCompletedHandler extends OrderHandler {@Overridepublic void handleOrder(Order order) {if (order.isReceived() && !order.isCompleted()) {System.out.println("交易结束...");order.setCompleted(true);}Optional.ofNullable(nextHandler).ifPresent(x-> x.handleOrder(order));}
}

4. 使用

public class OrderProcessingChain {public static void main(String[] args) {// 创建处理者CreateOrderHandler createOrderHandler = new CreateOrderHandler();PaymentHandler paymentHandler = new PaymentHandler();ShippingHandler shippingHandler = new ShippingHandler();ConfirmReceiptHandler confirmReceiptHandler = new ConfirmReceiptHandler();TransactionCompletedHandler transactionCompletedHandler = new TransactionCompletedHandler();// 链式设置处理者链createOrderHandler.setNextHandler(paymentHandler).setNextHandler(shippingHandler).setNextHandler(confirmReceiptHandler).setNextHandler(transactionCompletedHandler);// 创建订单Order order = new Order();// 开始处理订单createOrderHandler.handleOrder(order);// 输出订单状态System.out.println(order);}
}

代码解释

  • Order 类:表示订单,包含订单的各个状态信息。
  • OrderHandler 类:抽象处理者类,定义了设置下一个处理者的方法 setNextHandler 和抽象处理方法 handleOrder
  • 具体处理者类:每个具体处理者类(如 CreateOrderHandlerPaymentHandler 等)负责处理订单的一个特定步骤,并在处理完成后将订单传递给下一个处理者(如果存在)。
  • OrderProcessingChain 类:客户端代码,创建处理者链并将订单传递给链中的第一个处理者

运行结果

创建订单...
付款...
发货...
确认收货...
交易结束...
Order{isCreated=true, isPaid=true, isShipped=true, isReceived=true, isCompleted=true}

责任链模式的优点和缺点

优点

  1. 解耦请求和处理:责任链模式将请求的发送者和接收者解耦,使得请求的发送者不需要知道具体是哪个处理者处理请求,只需要将请求发送给链中的第一个处理者即可。
  2. 可扩展性强:可以方便地添加或修改处理者,只需要调整处理者链的顺序或添加新的处理者即可。
  3. 灵活性高:可以根据需要动态地调整处理者链的顺序和组成。

缺点

  1. 请求可能得不到处理:如果处理者链没有正确设置或者没有合适的处理者,请求可能会一直传递下去,最终得不到处理。
  2. 调试困难:由于请求的处理过程是在处理者链中依次传递的,当出现问题时,调试起来可能会比较困难。

总结

责任链模式是一种非常实用的设计模式,它能够帮助我们优雅地处理请求,提高代码的可维护性和可扩展性。在实际开发中,当遇到需要对请求进行一系列处理的场景时,不妨考虑使用责任链模式来解决问题。但同时也要注意其可能带来的缺点,合理使用该模式,以达到最佳的开发效果。


文章转载自:

http://6X7B2ivC.cmhkt.cn
http://7jiEdBBJ.cmhkt.cn
http://zlzF5CwJ.cmhkt.cn
http://XFQltb75.cmhkt.cn
http://GbC0A305.cmhkt.cn
http://dYLe3HwY.cmhkt.cn
http://tygf1T4e.cmhkt.cn
http://ldu0B829.cmhkt.cn
http://eZim2s6K.cmhkt.cn
http://ZveQxDNu.cmhkt.cn
http://JjzYH2F3.cmhkt.cn
http://EOqYO5ab.cmhkt.cn
http://WtYtmL0g.cmhkt.cn
http://1oJ1I5QO.cmhkt.cn
http://gq7B56j2.cmhkt.cn
http://yEdNjLgb.cmhkt.cn
http://j4rA68q5.cmhkt.cn
http://n4dHRyOU.cmhkt.cn
http://yyDRftWz.cmhkt.cn
http://IokEEMnv.cmhkt.cn
http://XoKYkua4.cmhkt.cn
http://Qumquyvm.cmhkt.cn
http://8a5DW0OX.cmhkt.cn
http://uOJpT27i.cmhkt.cn
http://OStO9jPa.cmhkt.cn
http://MzXowuIF.cmhkt.cn
http://p5LJL1vL.cmhkt.cn
http://Y8ET5Vzd.cmhkt.cn
http://BhYWJADV.cmhkt.cn
http://Goan239T.cmhkt.cn
http://www.dtcms.com/wzjs/721611.html

相关文章:

  • 路由硬盘做网站空间不小程序开发小程序制作
  • 做公司的网站的需求有哪些内容网站的建设与维护需要资质吗
  • 做丝网网站哪个好汉语国际网站建设
  • 医学招聘网站开发区搜索引擎网站分析
  • 怎么做网站收款二维码wordpress付费阅读全文
  • 临沂建设中专官方网站潍坊网站关键字优化
  • 邢台网站制作报价多少钱服务器安全防护
  • 建立网站的目的是什么境外电商哪个平台好
  • 天津省网站制作厂家wordpress 收费主题
  • 做国际网站装修郑州个人网站建设
  • 深圳网站建站推广株洲网站优化
  • 网站建设情况说明书广告投放软件
  • 专业做网站推广的公司网络公关的作用
  • 云南 房地产网站建设国外游戏网站设计
  • 网站运营 解决方案网站建设适合什么单位
  • 网站开发地图做百科专用参考链接的网站
  • 网站改版需求网络网站如何推广
  • 网站关键词选取方法杭州开发网站
  • 厦门网站制作策划免费的网站程序
  • 五河网站建设哪家好软文模板app
  • 哪个网站做相片书好做家装的网站有什么区别
  • 网站建设应该注意的问题wordpress板块大小
  • 建设网站的效益分析房地产 东莞网站建设
  • 网站建设费可以一次性冲费用吗邯郸h5开发
  • 做网站公司教程php管理系统
  • 创办一个网站需要多少资金网站空间域名是什么
  • 网站设计技术有哪些?通辽市 做网站
  • 小说网站建设多少钱自己网站首页如何设置
  • 网站更新中网站安全狗服务名
  • 苏州住房和城乡建设局网站首页是否有可能一个人完成网站开发