public class CarBodyHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车身");}}

public abstract class CarHandler {public abstract void HandlerCar();
}

public class CarHeadHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车头");}}

public class CarTailHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车尾.");}}

public class MainClass {public static void main(String[] args) {CarHandler headH =  new CarHeadHandler();CarHandler bodyH =  new CarBodyHandler();CarHandler tailH =  new CarTailHandler();//这种方式的缺点是客户端必须手动地调用HandlerCar()//像SERVLET的容器的过滤器的框架的实现是自动的.//就是组装完车头之后你自己组装车身,组装车尾.//我把一个流程给你以后:是先组装车头还是先组装车身.你按照我给定的流程你来执行.//对象的组织-消息的传递-职责的分配-任务的完成
        headH.HandlerCar();bodyH.HandlerCar();tailH.HandlerCar();}
} 

这是非责任链模式的代码.组装一辆汽车的应用场景.


ConcreteHandler:CarHeadHandler.java、CarTailHandler.java、CarBodyHandler.java

Handler:CarHandler.java  Hander有一条线是对自身的引用.

车头持有车身的引用,车身持有车尾的引用.每次执行完自己的方法的时候调用下一个节点的方法继续执行.


缺点:因为一个对象总是要调用链的下一个对象进行处理,如果中间有一个对象或者是实现出现了问题就会影响处理速度.


package com.ibeifeng.ex2;public class CarBodyHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车身");if(this.carHandler!=null){this.carHandler.HandlerCar();}}}

package com.ibeifeng.ex2;public class CarHeadHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车头");if(this.carHandler!=null){this.carHandler.HandlerCar();}}}

package com.ibeifeng.ex2;public class CarTailHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车尾.");if(this.carHandler!=null){this.carHandler.HandlerCar();}}}

package com.ibeifeng.ex2;public abstract class CarHandler {protected CarHandler carHandler;//protected属性子类可以访问...//private CarHandler carHandler;//持有自身的引用./*    public void setNextHandler(CarHandler carHandler){this.carHandler =  carHandler;}*/public CarHandler setNextHandler(CarHandler carHandler){this.carHandler =  carHandler;return this.carHandler;}public abstract void HandlerCar();
}

package com.ibeifeng.ex2;public class MainClass {public static void main(String[] args) {CarHandler headH =  new CarHeadHandler();CarHandler bodyH =  new CarBodyHandler();CarHandler tailH =  new CarTailHandler();//这种方式的缺点是客户端必须手动地调用HandlerCar()//像SERVLET的容器的过滤器的框架的实现是自动的.//就是组装完车头之后你自己组装车身,组装车尾.//我把一个流程给你以后:是先组装车头还是先组装车身.你按照我给定的流程你来执行.//对象的组织-消息的传递-职责的分配-任务的完成
/*        headH.HandlerCar();bodyH.HandlerCar();tailH.HandlerCar();*///不需要调用三个类的方法了,而是把顺序预先设定好.//组装顺序预先设定好,顺序是车头->车身->车尾headH.setNextHandler(bodyH);//把第二个设置到第一个里面
        bodyH.setNextHandler(tailH);//调用职责链的链头来完成操作
        headH.HandlerCar();System.out.println("------------------------------");//顺序改变,希望是车身->车头->车尾
        bodyH.setNextHandler(headH);headH.setNextHandler(tailH);bodyH.HandlerCar();System.out.println("--------------------------------------");//简便操作
        bodyH.setNextHandler(headH).setNextHandler(tailH);bodyH.HandlerCar();}
} 

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6746879.html

第十九讲:职责链模式相关推荐

  1. 十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#

    不在其位,不谋其政! –出自<论语·泰伯> 故事背景 在现实世界中,有很多情况下会遇到一些推卸责任的场景,比如要办理一件事的时候,被告诉你要去做个做这个事情,但是去了这个地方,确告诉要到另 ...

  2. 设计模式系列之九:职责链模式

    前言 责任链模式属于行为型设计模式,所谓责任链,就是把责任处理对象连成一条链,这样当一个处理对象不能及时处理的时候就会交给下一个处理对象处理,直到被处理为止.就像我们找人签字盖章的时候,当一个对象不能 ...

  3. 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)

    概述 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合. 如何使请求的发送者不需要指定具体的接受者?让请求的 ...

  4. C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例 ...

  5. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  6. 职责链模式(chain of responsibility)

    原文地址 一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不 ...

  7. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  8. 重温设计模式(三)——职责链模式(chain of responsibility)

    一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...

  9. 『设计模式』职责链模式(Chain of Responsibility) 可怜的加薪、请假之路

    23种设计模式+额外常用设计模式汇总 (持续更新) 问题抽象 客户端发出一个请求,会有很多对象都可以来处理这个请求,而且不同对象的处理逻辑是不一样的. 对于客户端而言,无所谓谁来处理,反正有对象处理就 ...

  10. C#设计模式学习笔记:(20)职责链模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8109100.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第八个模式--职 ...

最新文章

  1. zookeeper集群环境搭建
  2. CNN边缘检测--Richer Convolutional Features for Edge Detection
  3. 33 个 JavaScript 核心概念系列(三): 显式 (名义) 与 隐式 (鸭子)类型转换
  4. qhfl-9 微信模板消息推送
  5. django-orm-查询基本操作
  6. java l1 l2缓存,Java 两级缓存框架
  7. activitimq集群搭建_Spring-activiti
  8. win10改计算机用户名,win10如何改成自己想要的文件夹用户名?
  9. 《圈圈教你玩USB》之 USB鼠标 描述符
  10. DEV-C++官方下载地址
  11. Redis数据结构总结
  12. 服务产品(商品)评论中的产品特征挖掘方法
  13. 飞马网饿了么技术沙龙大数据专场圆满结束
  14. Unity3D插件 Doozy UI 学习(一):打开一个面板
  15. 键盘钢琴软件v1.0.1.0官方pc版
  16. 程序员数学(13)--轴对称与等腰三角形
  17. PICK菲仕乐锅具,轻松开启荤素搭配健康轻生活
  18. 贪心算法解决马的遍历(带蹩马腿)
  19. c语言 输入职工工资资料,通过结构体的数组来进行操作 报告,c语言课程设计报告-职工工资管理系统...
  20. 使用STM32CUBEIDE创建工程,点亮LED

热门文章

  1. 西浦与杭电计算机选哪个,四邮四电究竟谁强谁弱?哪三所大学报考更有性价比?...
  2. Java一些基础知识的整合
  3. ajax 链接java_如何使用ajax将下拉菜单链接到表
  4. 前端实现图片悬浮_悬浮图片之上效果实现
  5. 热榜!基于jsp+mysql的JSP在线水果销售商城系统设计实现【建议收藏】
  6. oracle 设置输出显示中文乱码,修改oracle当前会话的语言环境,解决oracle显示中文乱码的问题 | 信春哥,系统稳,闭眼上线不回滚!...
  7. dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程
  8. 板子制作_工厂制作风管VS现场制作有什么区别?
  9. python视频提取音频_python脚本实现mp4中的音频提取并保存在原目录
  10. zabbixdocker里的mysql_基于Docker安装与部署Zabbix