`
xuedong
  • 浏览: 299083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java常用设计模式之职责链模式

阅读更多
---------------------- 职责链模式(Chain of Responsibility) -----------------------
(1)
Chain of Responsibility职责链模式:
为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
-->
要沿着链转发请求,并保证接受者为隐式的,每个链上的对象都有一致的处理请求和访问链上后继者的接口(即如下实例中,在自己方法中再调用一次相同的方法)。
(2)
public class Boy {
 
 private boolean hasCar; // 是否有车
 private boolean hasHouse; // 是否有房
 private boolean hasResponsibility; // 是否有责任心
 public Boy() {
 }
 public Boy(boolean hasCar, boolean hasHouse, boolean hasResponsibility) {
  this.hasCar = hasCar;
  this.hasHouse = hasHouse;
  this.hasResponsibility = hasResponsibility;
 }
 public boolean isHasCar() {
  return hasCar;
 }
 public void setHasCar(boolean hasCar) {
  this.hasCar = hasCar;
 }
 public boolean isHasHouse() {
  return hasHouse;
 }
 public void setHasHouse(boolean hasHouse) {
  this.hasHouse = hasHouse;
 }
 public boolean isHasResponsibility() {
  return hasResponsibility;
 }
 public void setHasResponsibility(boolean hasResponsibility) {
  this.hasResponsibility = hasResponsibility;
 }
}
public interface Handler {
  public void handleRequest(Boy boy);
}
public class HouseHandler implements Handler {
 
 private Handler handler;
 public HouseHandler(Handler handler) {
  this.handler = handler;
 }
 public Handler getHandler() {
  return handler;
 }
 public void setHandler(Handler handler) {
  this.handler = handler;
 }
 public void handleRequest(Boy boy) {
  if (boy.isHasHouse()) {
   System.out.println("没想到吧,我还有房子");
  } else {
   System.out.println("我也没有房");
   handler.handleRequest(boy);
  }
 }
}
public class CarHandler implements Handler {
 private Handler handler;
 public CarHandler(Handler handler) {
  this.handler = handler;
 }
 public Handler getHandler() {
  return handler;
 }
 public void setHandler(Handler handler) {
  this.handler = handler;
 }
 public void handleRequest(Boy boy) {
  if (boy.isHasCar()) {
   System.out.println("呵呵,我有辆车");
  } else {
   System.out.println("我没有车");
   handler.handleRequest(boy);
  }
 }
}
public class ResponsibilityHandler implements Handler {
 private Handler handler;
 public ResponsibilityHandler(Handler handler) {
  this.handler = handler;
 }
 public Handler getHandler() {
  return handler;
 }
 public void setHandler(Handler handler) {
  this.handler = handler;
 }
 public void handleRequest(Boy boy) {
  if (boy.isHasResponsibility()) {
   System.out.println("我只有一颗带Responsibility的心");
  } else {
   System.out.println("更没有责任心");
   handler.handleRequest(boy);
  }
 }
}
public class Girl {
 
 public static void main(String[] args) {
  // 这个boy没有车,也没有房,不过很有责任心
  Boy boy = new Boy(false, false, true);
                // 也可以使用setHanlder方法
  Handler handler = new CarHandler(new HouseHandler(
    new ResponsibilityHandler(null)));
  handler.handleRequest(boy);
 }
}
==>
如何实例使请求沿着链在各接受对象中传递,当没被第一个接受对象接受时,会传递给第二个对象,若被第一个对象接受了,则不传递下去:
1.各具体的接受对象采用这样的构造方法:
public CarHandler(Handler handler) { this.handler = handler; }
2.各具体的接受对象实现接口的方法handleRequest()中.在调用时,若被接受,则执行true的内容,若不被接受,则执行false的内容,并继续调用再调用handleRequest()方法.
3.在最后的测试类中,生成具体的handler时,用多层包含的形式.这样,在调用了上一层car的方法后,会调用house的相应方法,最后再调用ResponsibilityHandler的方法.
==>前两个handler是采用了有参数的构造方法,最后一个是采用了为NULL的构造方法
 

 

分享到:
评论

相关推荐

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式

    JAVA23个常用设计模式(ppt下载)

    这23个常用的设计模式涵盖了创建型、结构型和行为型三大类别,是每一个Java开发者应当熟悉并掌握的基础知识。 1. **创建型设计模式**:主要包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。单例...

    JAVA常用设计模式

    【Java常用设计模式详解】 设计模式是软件开发中的一种最佳实践,它提供了在特定场景下解决常见问题的模板。在Java中,设计模式分为三大类:创建型、结构型和行为型模式。以下是对这些模式的详细解释: 1. 创建型...

    java设计模式ppt

    以下是对给定文件中提到的几种Java设计模式的详细解析。 #### 1. 单例模式 (Singleton Pattern) 单例模式是一种常用的对象创建型模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。实现单例模式的关键...

    Java之23种设计模式解析

    这份资料详细介绍了在Java编程中常用的23种设计模式,旨在提升开发者对于软件设计的理解和应用能力,从而写出更加高效、可维护和可扩展的代码。 首先,我们来看一下23种设计模式的分类:它们可以分为三大类,即创建...

    Java设计模式刘伟书本中模拟考试答案

    这些模式都是在软件设计中常用的设计模式,分别针对不同的设计问题和需求场景提供解决方案。简单工厂模式提供了一个创建对象的工厂方法,建造者模式允许逐步构建复杂对象,外观模式为子系统中的一组接口提供一个统一...

    JAVA常用设计模式详解大全.pdf

    ### JAVA常用设计模式详解 #### 一、设计模式概述 设计模式是在软件设计过程中针对特定问题的典型解决方案。这些模式经过长时间的实践检验,被证明是解决特定问题的有效方法。设计模式可以分为三大类:创建型模式...

    java几种常用的设计模式源码和心得

    本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...

    Java常用设计模式源码

    这个压缩包“Java常用设计模式源码”显然提供了多种常见的Java设计模式实现,适合初学者进行学习和实践。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,有饿汉式、懒汉式、双重检查...

    java 设计模式.23种java常用设计模式

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时,如何有效地组织代码,以提高软件的可重用性、可维护性和可扩展性。这23种设计模式是根据GOF(GoF,Gang of Four)的经典著作《设计模式:可复用...

    java 常用设计模式

    以下是对标题"java 常用设计模式"及描述中涉及知识点的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。单例模式通常用于控制资源管理,如数据库连接池或线程池。实现方式包括饿汉式(静态...

    常用的设计模式

    行为型模式涉及对象之间的通信,描述了对象之间如何相互协作完成单个对象无法独立完成的任务,常见的行为型模式有八种:模板方法模式、观察者模式、状态模式、职责链模式、命令模式、访问者模式、策略模式和备忘录...

    java常用23种设计模式(含源码解说).rar_java常见设计模式23中(含例子代码)

    文档“java常用23种设计模式(含源码解说).docx”中,每一种设计模式都会详细阐述其意图、主要参与者、适用情况、优缺点以及实际应用的源码示例。例如,单例模式确保一个类只有一个实例,并提供全局访问点;工厂方法...

    常用设计模式及java程序.rar

    这个压缩包"常用设计模式及java程序.rar"显然包含了关于如何在Java编程中应用这些模式的信息。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注对象的创建过程,例如: 1. **单例...

    java设计模式

    内容包括设计模式概述、面向对象设计原则、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式、职责链模式、...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    《设计模式——Java语言中的应用》这本书深入探讨了如何在Java中有效地运用这些模式。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过双重检查锁定(Double-Checked Locking)或...

    JAVA常用设计模式详解大全

    Java设计模式是面向对象编程中的一种最佳实践,它提供了一种在特定场景下解决软件设计问题的标准方案。本文将深入探讨23种经典的Java设计模式,帮助开发者更好地理解和应用这些模式,提高代码的可维护性、扩展性和...

    JAVA常用设计模式详解大全.docx

    以下是对标题"JAVA常用设计模式详解大全.docx"中涉及的一些主要设计模式的详细解释: **创建模式** 1. **工厂模式**:工厂模式是一种简单的对象创建方式,它提供一个接口来创建对象,但具体创建哪个类的对象是由...

    Java常用编程模式代码

    10. **职责链模式**:职责链模式将请求的发送者和接收者解耦,多个对象可以处理一个请求,哪个对象处理由运行时决定。 11. **命令模式**:命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数...

Global site tag (gtag.js) - Google Analytics