文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇了解责任链模式

2024-12-03 01:44

关注

责任链模式:

定义一条加工链,请求发起者发起请求(原料),请求(原料)通过这条加工链进行一步步的处理后。输出最终的产品产出。

意图

请求的发起者和接收者,通过这条加工链条,进行解耦。将各种处理器进行连接,形成一条加工链条,请求一步步的进行传递,进行处理,直到处理完毕输出。

主要解决

职责链上的处理者负责处理请求,请求发起者将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。

关键代码

将各种职责处理器进行一步步连接,组装成一条责任链。

优点

降低了耦合

简化了对象,使得对象不需要知道责任链的具体实现

增强给对象指派职责的灵活性。如新增一个职责只需要加处理器加工到链上即可。

使用场景

有多个对象可以处理同一个请求。比如:定义了一个用户对象,需要对这个用户对象进行一系列处理。那么可以将各种处理抽象成处理器,将各种处理器进行连接形成一条加工链。将对象送入到加工链上进行处理。

示例图:

具体实现

创建用户类

  1.  1 
  2.  4@Data 
  3.  5@AllArgsConstructor 
  4.  6@NoArgsConstructor 
  5.  7public class User { 
  6.  8 
  7.  9    private int id; 
  8. 10 
  9. 11    private String name
  10. 12 
  11. 13} 

创建各种组装器

  1. 4public interface Seter { 
  2. 6    //设置参数 
  3. 7    void doSet(T request); 
  4. 8} 

ID组装器

  1. 4public class IdSeter implements Seter<User>{ 
  2. 6    @Override 
  3. 7    public void doSet(User user) { 
  4. 8        user.setId(1); 
  5. 9    } 
  6. 0} 

name组装器

  1. 5public class NameSeter implements Seter<User>{ 
  2. 7    @Override 
  3. 8    public void doSet(User user) { 
  4. 9        user.setName("mengxin"); 
  5. 0    } 

接下来定义责任链,将组装器连接起来

  1. 4public interface Chain { 
  2. 6    //组装 
  3. 7    void assemble(T request); 
  4. 9} 

用户责任链

  1.  1 
  2.  4public class UserChain implements Chain<User>{ 
  3.  5 
  4.  6    private final ListUser>> seters = new LinkedList<>(); 
  5.  7 
  6.  8    //初始化(组装责任链),注入seter处理器处理 
  7.  9    public UserChain(){ 
  8. 10        //注入id设置器 
  9. 11        seters.add(new IdSeter()); 
  10. 12        //注入名称设置器 
  11. 13        seters.add(new NameSeter()); 
  12. 14    } 
  13. 15 
  14. 16     
  15. 20    @Override 
  16. 21    public void assemble(User request) { 
  17. 22        seters.forEach(userSeter -> userSeter.doSet(request)); 
  18. 23    } 
  19. 24} 

测试调用

  1.  1 
  2.  4public class Test { 
  3.  5 
  4.  6 
  5.  7    public static void main(String[] args) { 
  6.  8        //用户责任链 
  7.  9        UserChain userChain = new UserChain(); 
  8. 10        User user = new User(); 
  9. 11        //调用责任链,设置参数 
  10. 12        userChain.assemble(user); 
  11. 13        //加工完后获取到的对象值 
  12. 14        System.out.println(user.getId()+","+user.getName()); 
  13. 15    } 
  14. 16} 

 

 

来源:我好困啊内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯