JAVA中的责任链模式(CH01)
责任链模式的关键在于每一个任务处理者都必须持有下一个任务处理者的作用
纯的责任链:纯的责任链是只能也必须只有一个任务处理者去处理这个任务,
不会出现没有处理者处理的情况,也不会出现有多个处理者处理同一个任务
不纯的责任链:可以有多个任务处理者同时处理一个任务,那么就表示这个任务是大家一起共享的,或者也可以没有任何处理这去处理他
责任链:
这是一个简单的经费申请责任链。
客户端发请求申请经费,
申请经费从最小权限范围开始申请,如果权限不足则向上一级申请。
1:定义一个抽象类(AbstractHandler),抽象申请经费方法.
2:定义三个子类,继承 AbstractHandler 父类,实现抽象方法 execute(int money);
1:这个抽象定义自己本身,然后赋予get&set方法;
public abstract class AbstractHandler { //定义自己,给get&set方法
private AbstractHandler handler; public AbstractHandler getHandler() {
return handler;
} public void setHandler(AbstractHandler handler) {
this.handler = handler;
} //抽象申请经费方法
public abstract void execute(int money);
}
2:第一个子类,申请经费范围在小于或定于200内,
做出判断,如果不在范围内,从新调用execute方法,
此时的execute是下一级审批官的方法了在后面客户端main方法里面可以设置
a) money<=200
public class HandlerA extends AbstractHandler { @Override
public void execute(int money) {
if(money<=200){
System.out.println("A审核通过…………");
}else{
getHandler().execute(money);
}
}
}
b) money<=500
public class HandlerB extends AbstractHandler {
@Override
public void execute(int money) {
if(money<=500){
System.out.println("B审核可以通过…………");
}else{
getHandler().execute(money);
}
}
}
c) money<=1000
此时为最高一级
public class HandlerC extends AbstractHandler {
@Override
public void execute(int money) {
if(money<=1000){
System.out.println("C审核通过…………");
}else{
System.out.println("审超出预算");
}
}
}
客户端
public class Main {
public static void main(String[] args) {
//实现三个不同级别权限的子类
AbstractHandler A = new HandlerA();
AbstractHandler B = new HandlerB();
AbstractHandler C = new HandlerC();
//给子类赋予下一个对应的级别
A.setHandler(B);
B.setHandler(C);
A.execute(300);
}
}
输出结果为:A审核通过…………
后记:虽然发现很容易就完成了责任链,但是发现代码并不如意,耦合太高,后续一篇会对此进行优化
JAVA中的责任链模式(CH01)的更多相关文章
- JAVA中的责任链模式(CH02)
对责任链CH01做出优化,解决耦合度太高问题 记得上一篇我们使用的是抽象类,然后用子类去继承的方法实现等级的桥接,从而发现了耦合度太高. 为了解决这个问题. 我们本次使用接口进行抽象,然后使用到一个” ...
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
- 如何在C#/.NET Core中使用责任链模式
原文:Chain Of Responsbility Pattern In C#/.NET Core 作者:Wade 译者:Lamond Lu 最近我有一个朋友在研究经典的"Gang Of F ...
- java设计模式之责任链模式以及在java中作用
责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个 ...
- JAVA设计模式之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- 详解java设计模式之责任链模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...
- Java设计模式应用——责任链模式
生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如 ...
- java设计模式之责任链模式(Chain of Responsibility)
转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
随机推荐
- Ubuntu 14.04循环登录问题(密码正确,无法登录)
今天遇到了ubuntu 的循环登录问题,即使输入的密码是正确的,也无法成功登录.查询资料,发现有各种问题引起的循环登录问题,比如安装了jdk,或者安装了驱动. 最后找到了问题的原由:我的电脑是双显卡, ...
- Java 8 Stream API说明
Java 8增加了很多强大的功能,流(stream)就是其中之一.现在对api的使用做个说明: map 对流中的元素做转换,目前jdk提供了mapToInt,mapToLong,mapToDouble ...
- layui中的submit提交本地数据在控制在输出为空数组(解决)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javaweb(2)之Servlet入门
Hello Servlet 方式一 1.新建 web 工程,编写一个类,实现 javax.servlet.Servlet 接口: package com.zze.servlet; import jav ...
- python框架之Django(3)-模版
常用语法 符号 {{...}} # 变量相关 {%...%} # 逻辑相关 {#...#} # 注释 使用变量 def test(request): name = '张三' age = 19 retu ...
- docker centos 老是退出
1. 使用docker 镜像可以加快拉去.操作系统的使用第二种格式. 您可以使用以下命令直接从该镜像加速地址进行拉取: $ docker pull registry.docker-cn.com/myn ...
- python数据结构-如何为元组中的每个元素命名
如何为元组中的每个元素命名 简述 当对象数据格式固定时,用元组比列表更节省内存空间, 我们使用索引访问元组元素,但是这种访问方式会降低程序的可读性. 举个栗子 对于学生的信息,我们有固定的数据格式,我 ...
- nodejs 癞子麻将
'use strict'; var _ = require('lodash'); var quick = require('quick-pomelo'); var P = quick.Promise; ...
- a标签和p标签不能设置margin
经常会发现正常div的属性在a标签上或者p标签上都不管用,这是因为a标签和p标签都不是盒子模型. 例如: <div style="margin-top:5px;">&l ...
- 实现html页面自动刷新的几种方式
自动页面刷新通常会用在对数据的实时性比较敏感的网站中,比如股票走势等,另外在普通的页面自动跳转中也会使用到页面自动刷新技术. 页面刷新我见过的有三种方式,下面来一一说明 1.通过在<head&g ...