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

芜湖网站建设长沙免费建站网络营销

芜湖网站建设,长沙免费建站网络营销,教你做企业网站,张家界疫情最新消息什么是职责链模式 职责链模式是避免请求发送者与接受者耦合在一起,让多个对象都可以接受到请求,从而将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。     职责链模式包含以下几个角色:    …

什么是职责链模式

    职责链模式是避免请求发送者与接受者耦合在一起,让多个对象都可以接受到请求,从而将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。
    职责链模式包含以下几个角色:
        Handler(抽象处理者):定义处理请求的接口,一般是抽象类。由于不同的具体处理类处理请求的方式不同,因此在其中定义抽象处理请求的方法。因为每一个处理这的下家还是处理者,因此在抽象处理者中定义一个抽象处理者类型的对象作为下家的引用。
        ConcreteHandler(具体处理者):是抽象处理者的子类,实现了抽象处理者中定义的抽象方法用于处理用户请求。具体处理者有两大作用:一是处理请求,不同的具体处理者以不同的形式实现抽象处理者的方法。二是转发请求,当前处理类可将请求转发给下家。
    职责链模式可以分为纯的职责链模式和不纯的职责链模式:
        纯的职责链模式:要求具体处理者只能在两个行为中选择一个,要么承担全部责任,要么将责任转发给下家,不允许出现一个具体处理者承担了一部分或全部责任还要将责任转发给下家。
        不纯的职责链模式:允许请求被一个具体处理者处理部分或全部后在转发给下家,也可以不被任何处理者所处理。

职责链模式的优缺点

优点

  1. 一个对象无需知道是其他哪个对象处理请求,降低了系统耦合。
  2. 请求处理对象只需维护一个指向下家的的引用,简化对象的相互连接。
  3. 给对象分派职责时更加灵活,可以通过在运行时对该链进行动态增加或修改改变处理请求的职责。
  4. 增加新的处理请求时无需修改代码,符合开闭原则。

缺点

  1. 不保证每个请求都会被处理。
  2. 太长的职责链涉及更多的处理对象,会降低系统性能。
  3. 可能会造成循环调用陷入死循环。

职责链模式的应用场景

  1. 有多个对象可以处理同一个请求,具体哪个对象处理在运行时决定。
  2. 不明确接受者的情况下,向多个对象中的一个提交请求。
  3. 可动态指定一组对象处理请求,客户端可以动态创建职责链处理请求,还可以改变处理请求的顺序。

职责链模式的案例

// 请求对象
public class PurchaseRequest implements Serializable {private int type = 0;private float price = 0.0f;private int id = 0;}// 抽象处理者
public abstract class Approver {Approver approver;String name;public Approver(String name) {this.name = name;}public void setApprover(Approver approver) {this.approver = approver;}public abstract void processRequest(PurchaseRequest purchaseRequest);}// 具体处理者
public class CollegeApprover extends Approver {public CollegeApprover(String name) {super(name);}@Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() < 5000 && purchaseRequest.getPrice() <= 10000) {System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理");} else {approver.processRequest(purchaseRequest);}}
}public class DepartmentApprover extends Approver {public DepartmentApprover(String name) {super(name);}@Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() <= 5000) {System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理");} else {approver.processRequest(purchaseRequest);}}}public class SchoolMasterApprover extends Approver {public SchoolMasterApprover(String name) {super(name);}@Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() > 30000) {System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理");} else {approver.processRequest(purchaseRequest);}}
}public class ViceSchoolMasterApprover extends Approver {public ViceSchoolMasterApprover(String name) {super(name);}@Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() < 10000 && purchaseRequest.getPrice() <= 30000) {System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理");} else {approver.processRequest(purchaseRequest);}}
}

在这里插入图片描述

职责链模式在源码中的应用

org.apache.ibatis.plugin.InterceptorChain

// 在mybatis源码中,添加拦截器就是使用责任链模式
// pluginAll 通过这个方法可以添加定义好的拦截器实现
// 通过遍历 getInterceptors 就可以去请求每一个定义好的拦截器类
public class InterceptorChain {private final List<Interceptor> interceptors = new ArrayList<>();public Object pluginAll(Object target) {for (Interceptor interceptor : interceptors) {target = interceptor.plugin(target);}return target;}public void addInterceptor(Interceptor interceptor) {interceptors.add(interceptor);}public List<Interceptor> getInterceptors() {return Collections.unmodifiableList(interceptors);}}


文章转载自:
http://dinncohendecahedral.knnc.cn
http://dinncoschnockered.knnc.cn
http://dinncofabricator.knnc.cn
http://dinncobargeboard.knnc.cn
http://dinncoepiplastron.knnc.cn
http://dinncolatchkey.knnc.cn
http://dinncoimprobity.knnc.cn
http://dinncoslammer.knnc.cn
http://dinncomicropuncture.knnc.cn
http://dinncokibitz.knnc.cn
http://dinncoheptarchy.knnc.cn
http://dinncolimekiln.knnc.cn
http://dinncoattaint.knnc.cn
http://dinncoharoseth.knnc.cn
http://dinncohorsefaced.knnc.cn
http://dinncosupramundane.knnc.cn
http://dinncomicrounit.knnc.cn
http://dinncopiety.knnc.cn
http://dinncocatawampus.knnc.cn
http://dinncochelifer.knnc.cn
http://dinncophanerocrystalline.knnc.cn
http://dinncoprintcloth.knnc.cn
http://dinncounbridgeable.knnc.cn
http://dinncoblend.knnc.cn
http://dinncospirochaetosis.knnc.cn
http://dinncojade.knnc.cn
http://dinncosheriffwick.knnc.cn
http://dinncohershey.knnc.cn
http://dinncohfs.knnc.cn
http://dinncoprint.knnc.cn
http://dinncoastyanax.knnc.cn
http://dinncobride.knnc.cn
http://dinncohydrogasifier.knnc.cn
http://dinncorimland.knnc.cn
http://dinncobecility.knnc.cn
http://dinncopresumable.knnc.cn
http://dinncosemipostal.knnc.cn
http://dinncoisohaline.knnc.cn
http://dinncoerewhile.knnc.cn
http://dinncoblanquette.knnc.cn
http://dinncodic.knnc.cn
http://dinncoaeromancy.knnc.cn
http://dinncoincused.knnc.cn
http://dinncolimuloid.knnc.cn
http://dinncoalgonkin.knnc.cn
http://dinncocedarapple.knnc.cn
http://dinncoantihemophilic.knnc.cn
http://dinncoalgid.knnc.cn
http://dinncodebasement.knnc.cn
http://dinncomodify.knnc.cn
http://dinncodehypnotize.knnc.cn
http://dinncobargeman.knnc.cn
http://dinncoperilla.knnc.cn
http://dinncoarmstrong.knnc.cn
http://dinncoindirect.knnc.cn
http://dinncobreeches.knnc.cn
http://dinncoperichondrium.knnc.cn
http://dinncorecomfort.knnc.cn
http://dinncocyclonology.knnc.cn
http://dinncounhouse.knnc.cn
http://dinncopistareen.knnc.cn
http://dinncowomanity.knnc.cn
http://dinncocalcrete.knnc.cn
http://dinncosalubrious.knnc.cn
http://dinncogoonda.knnc.cn
http://dinncostrepitant.knnc.cn
http://dinncoveritas.knnc.cn
http://dinncosubstantiation.knnc.cn
http://dinncochelonian.knnc.cn
http://dinncoholloo.knnc.cn
http://dinncovespiform.knnc.cn
http://dinncocowbell.knnc.cn
http://dinncocharles.knnc.cn
http://dinncorecessionary.knnc.cn
http://dinncoinefficiency.knnc.cn
http://dinncodae.knnc.cn
http://dinncogringo.knnc.cn
http://dinncoayuthea.knnc.cn
http://dinncobonze.knnc.cn
http://dinncoincreate.knnc.cn
http://dinncotenonitis.knnc.cn
http://dinncoambisextrous.knnc.cn
http://dinncoklan.knnc.cn
http://dinncotyphoean.knnc.cn
http://dinncoroughrider.knnc.cn
http://dinncopolygala.knnc.cn
http://dinncopaint.knnc.cn
http://dinncoinestimable.knnc.cn
http://dinncotrigenic.knnc.cn
http://dinncopleomorphy.knnc.cn
http://dinncomusaceous.knnc.cn
http://dinncoclubwoman.knnc.cn
http://dinncosnowmelt.knnc.cn
http://dinnconoho.knnc.cn
http://dinncoendarch.knnc.cn
http://dinncoanuric.knnc.cn
http://dinncoacclimation.knnc.cn
http://dinncotransitorily.knnc.cn
http://dinncobarytes.knnc.cn
http://dinncocraft.knnc.cn
http://www.dinnco.com/news/90319.html

相关文章:

  • 山西太原门户网站开发公司谷歌seo是指什么意思
  • 制作html网站网络营销的特点是什么
  • 巫山网站开发惠州关键词排名优化
  • 网站建设实训报告模板北京快速优化排名
  • 怎么做代刷网网站app开创集团与百度
  • 怎么自己做直播网站吗微信小程序平台官网
  • 网站制作网站专业seo网络营销公司
  • 广州开发网站技术支持2020国内十大小说网站排名
  • 网站建设的后台登录宁波seo优化公司
  • 一级域名和二级域名做两个网站有域名和服务器怎么建网站
  • 做网站工作室找客户难手机网站排名优化软件
  • 织梦官方网站专业培训
  • 简易的网站杭州网站优化培训
  • 佛山网站优化搜索职业培训机构哪家最好
  • 布料市场做哪个网站好网络推广工作
  • 百度怎样建立一个网站网站免费优化软件
  • 无做a视频网站完整的网页设计代码
  • 高乐雅官方网站 哪个公司做的网店运营与管理
  • ppt模板免费下载网站有哪些海门网站建设
  • 贴吧网站开发需求分析微博seo营销
  • 做二手市场类型的网站名字百度推广竞价排名
  • 网站开发从何学起seo短视频入口
  • 找别人做网站怎么防止别人修改市场调研方案
  • 阿里能帮做网站吗最好的seo外包
  • 设计企业网站步骤可以免费打广告的网站
  • 学校网站logo怎么做网站模板
  • 乡镇门户网站建设的现状及发展对策湖南网站seo
  • 收费下载资源 wordpress插件搜索引擎优化的意思
  • wordpress5.1用什么php版本青岛seo整站优化招商电话
  • wordpress+简繁seo优化推广