java设计模式(五)责任链模式
很多对象有每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上某个对象决定处理此请求,应用场景如单位审批流程等。
要点:1)抽象处理者角色:定义处理请求接口及设定下家引用
2)具体处理着角色:具体处理请求或选择将请求传给下家
1、抽象处理者角色类,定义处理请求接口及下家引用
public abstract class PriceHandle {
protected PriceHandle successor;
public void setSuccessor(PriceHandle successor) {
this.successor = successor;
}
public abstract void process(float discount);
public static PriceHandle createPriceHandle() {
PriceHandle sales = new Sales();
PriceHandle direct = new Direct();
PriceHandle ceo = new CEO();
sales.setSuccessor(direct);
direct.setSuccessor(ceo);
return sales;
}
}
2、具体处理者角色类销售类
public class Sales extends PriceHandle {
public void process(float discount) {
if(discount <= 0.1) {
System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(), discount);
} else {
successor.process(discount);
}
}
}
3、具体处理者角色主管类
public class Direct extends PriceHandle {
public void process(float discount) {
if(discount <= 0.2) {
System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(), discount);
} else {
successor.process(discount);
}
}
}
4、具体处理者角色ceo类
public class CEO extends PriceHandle {
public void process(float discount) {
if(discount <= 0.3) {
System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(), discount);
} else {
System.out.format("%s拒绝了折扣:%.2f%n",this.getClass().getName(), discount);
}
}
}
5、测试类
public class Model {
private PriceHandle priceHandle;
public void setPriceHandle(PriceHandle priceHandle) {
this.priceHandle = priceHandle;
}
public void requestDiscount(float discount) {
priceHandle.process(discount);
}
public static void main(String[] args) {
Model customer = new Model();
customer.setPriceHandle(PriceHandle.createPriceHandle());
Random random = new Random();
for(int i = 0; i < 100; i++) {
System.out.print(i + ":");
customer.requestDiscount(random.nextFloat());
}
}
}
java设计模式(五)责任链模式的更多相关文章
- 详解java设计模式之责任链模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...
- JAVA设计模式之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- java设计模式之责任链模式(Chain of Responsibility)
转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
- Java设计模式之八 ----- 责任链模式和命令模式
前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command ...
- Java设计模式应用——责任链模式
生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如 ...
- java设计模式之责任链模式以及在java中作用
责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个 ...
- 击鼓传花联想到了Java设计模式:责任链模式
目录 应用场景 简单示例 责任链模式 定义 意图 主要解决问题 何时使用 优缺点 击鼓传花的故事 应用场景 http web请求处理,请求过来后将经过转码.解析.参数封装.鉴权等一系列的处理(责任), ...
- Java设计模式---ChainOfResponsibility责任链模式
参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...
- 【java设计模式】责任链模式
可以随时添加过滤器,并在主方法中添加删除: Main package com.tn.filter; public class Main { public static void main(String ...
随机推荐
- HDU 6212 Zuma 2017青岛网络赛 区间DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...
- Nagios Openstack Plugin
Some simple example for checking Openstack services check nova service list #!/bin/sh export OS_PROJ ...
- CentOS系统时间与现在时间相差8小时解决方法
很多网友在安装完CentOS系统后发现时间与现在时间相差8小时,这是由于我们在安装系统的时选择的时区是上海,而CentOS默认bios时间是utc时间,所以时间相差了8小时.这个时候的bios的时间和 ...
- CCScale9Sprite 的 setContentSize setPreferredSize 区别
CCScale9Sprite 设置图片大小方式: updateButtonSpriteMark->setContentSize(size);//设置图片的原始大小设置节点的未转换大小.无论节点被 ...
- 微信 JS API 支付教程
最近一个项目中用到了微信开发,之前没有做过支付相关的东西,算是拿这个来练练手,刚开始接触支付时候很懵逼,加上微信支付开发文档本来就讲得不清楚,我是彻底蒙圈了,参考了很多代码之后,算是有一点思路了. 用 ...
- 客户端使用less方法
<link rel="stylesheet/less" type="text/css" href="/css/style.less"& ...
- hbase 性能调
一. HBase的通用优化 1 高可用 在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整 ...
- HBase(一)HBase入门简介
一 HBase 的起源 HBase 的原型是 Google 的 BigTable 论文,受到了该论文思想的启发,目前作为 Hadoop 的子项目来开发维护,用于支持结构化的数据存储. Apache H ...
- .size和.empty
坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)? 能用empty的时候,不要用size empty可以保证常量复杂度,但list的size不保证 链表长度必须要遍历全部的 ...
- spring boot get和post请求,以及requestbody为json串时候的处理
GET.POST方式提时, 根据request header Content-Type的值来判断: application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的 ...