设计模式之责任链

学习设计模式之前我们要了解为什么要学习设计模式?

       为了方便后期项目的可维护性,代码的可复用性,也为了了解一些专用的术语(这个主要用于与别人沟通用)此外,就算不是为了编程,在生活中,我们遇到的问题也可以用设计模式的策略去做,设计模式,其实就是一种解决问题的思路。
       接下来,我们来了解设计模式中的“责任链模式”。
       该模式是行为型模式,封装了不断变化的接受者,行为就是发送者给接收者发送消息,因为接收者不断变化,所以这是一个变化的行为,所以封装了起来。责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。一个链可以是一条线,一个树,也可以是一个环。
       它主要用于在例如有if()else()判断内有大量代码的时候,需要将判断抽成责任链模式,不然每一个判断都将会执行一段大量的代码,而这个本来是不需要执行的,这样既影响了效率,后期如果if()中的条件如果更改,它所执行的语句也需要进行大量更改,不利于维护,为了降低这种耦合性,我们就用到了责任链模式。

举个粟子:
信使要传递一份信件,但是它不知道应该交给谁,它就先交给张三,然后张三看信上的名字是不是自己,如果是,自己就接收,不是就传给李四,同理,不是李四就传给王五。
这里写图片描述
       接下来我给大家讲解一下其中涉及到的角色。
第一个是“抽象处理者”,它们都拥有的一种行为,如传信,看信等,叫做Handler.
此时 ,我们打开eclipse,新建一个抽象类Handler,并为它指定下一个处理者nextHandler;并写一个方法handRequest判断是谁,request类似例子中的信,如果信上的名字是当前的处理者,那么就hander(request)处理这封信,如果不是,且它的下一个处理者不为空,那么就让它的下一个处理者处理这封信。如果为空,则提示没有下一个人啦。
这里写图片描述

       然后我们写一个信的抽象,AbstractRequest。在这个类中,我们返回这个对象,并且得到它的名字

这里写图片描述

       然后我们创建一个具体实现的人,即具体的抽象处理者张三,并设置它的名字为1。(因为我们之前我们设置它们的抽象名字时,设置的数据类型为Int)

这里写图片描述

       同理,我们创建李四,王五

这里写图片描述

这里写图片描述

       然后我们实例化一封给王五的信xinWangwu,让它继承抽象的信

这里写图片描述

       最后,我们来创建信使MainClient。在这里,我们实例化张三,李四,王五,并设置链的顺序,张三的下一个处理者为李四,李四的下一个处理者为王五。并实例化一封信。

这里写图片描述

       运行一下,我们可以看到

这里写图片描述

       此时,这个责任链完成,信被一直传递,直到王五收到。

以上就是一个纯的责任链,即要求一个具体的处理者对象只能在两个行为中选择一个:一个是承担责任,二是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
而我们在开发中遇到更多 的是不纯的责任链:在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。

下面再来说一下责任链的优缺点

优点:
1、责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。
2、可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。
3、类与类之间可以以松耦合的形式加以组织。

缺点:
因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

        初出茅庐,请批评指教。并且在此感谢一下我老大的悉心指导!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值