【设计模式】责任者模式
责任链模式,是处理对象将请求沿着一条链,找到能处理此请求的对象。
责任链模式的例子
下面以数据从数据库取还是从缓存中取为例,代码描述责任链的样子。
全部责任者的父类,继承者实现抽象方法。
public abstract class Handler {// 上一级的责任者private Handler successor;public abstract String handle(Integer docId);/* 责任者的Getter、Setter */public Handler getSuccessor() {return successor;}public void setSuccessor(Handler successor) {this.successor = successor;}}
责任者之一:数据库。编号为1-9的文章由此责任者读取。
import java.util.HashMap;
import java.util.Map;public class DataBaseHandler extends Handler {@Overridepublic String handle(Integer docId) {if (this.getSuccessor() != null) {String result = this.getSuccessor().handle(docId);if (result != null) {return result;}}Map<Integer, String> map = new HashMap<Integer, String>();for (int i = 1; i <= 9; i++) {map.put(i, "文章" + i);}System.out.println(this.getClass().getName() + " do business.");return map.get(docId);}}
责任者之一:缓存。编号为1-3的文章由此责任者读取。
import java.util.HashMap;
import java.util.Map;public class CacheHandler extends Handler {@Overridepublic String handle(Integer docId) {if (this.getSuccessor() != null) {String result = this.getSuccessor().handle(docId);if (result != null) {return result;}}Map<Integer, String> map = new HashMap<Integer, String>();for (int i = 1; i <= 3; i++) {map.put(i, "文章" + i);}System.out.println(this.getClass().getName() + " do business.");return map.get(docId);}}
设置他们的责任关系,调用责任者
public class HowToUse {public static void main(String[] args) {Handler dataBaseHandler = new DataBaseHandler();Handler cacheHandler = new CacheHandler();dataBaseHandler.setSuccessor(cacheHandler);System.out.println(dataBaseHandler.handle(3));System.out.println(dataBaseHandler.handle(5));}}
日志如下:
CacheHandler do business.
文章3
CacheHandler do business.
DataBaseHandler do business.
文章5
责任者的例子完毕。
部分重构
下面代码进行部分重构:判断环节进行封装公用,以及入参出参的泛型处理。
public abstract class Handler<I, O> {// 上一级的责任者private Handler<I, O> successor;public abstract O handle(I i);public O handleFacade(I i) {O o = null;if (this.getSuccessor() != null) {o = this.getSuccessor().handleFacade(i);if (o != null) {return o;}}return this.handle(i);}/* 责任者的Getter、Setter */public Handler<I, O> getSuccessor() {return successor;}public void setSuccessor(Handler<I, O> successor) {this.successor = successor;}}
import java.util.HashMap;
import java.util.Map;public class DataBaseHandler extends Handler<Integer, String> {@Overridepublic String handle(Integer docId) {Map<Integer, String> map = new HashMap<Integer, String>();for (int i = 1; i <= 9; i++) {map.put(i, "文章" + i);}System.out.println(this.getClass().getName() + " do business.");return map.get(docId);}}
其他类略。
【设计模式】责任者模式相关推荐
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- Python设计模式-状态模式
Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- 说说设计模式~建造者模式(Builder)
建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...
最新文章
- Redis源码解析——双向链表
- 高昆仑大数定律 中心极限定理
- sed用法之批量添加nagios services.cfg监控项
- 复数类完整实现 + 四则运算符重载
- private static final 修饰符
- Linux浏览文件的常用命令
- 揭秘视频千倍压缩背后的技术原理之预测技术
- javaone_JavaOne 2012:JavaOne技术主题演讲
- html怎么导入js编辑,three.js怎么导入html
- 【Level 08】U06 Good Feeling L3 Fun-filled concert
- python实现链表的删除_干货||链表的技巧和算法总结
- solid 设计原则 php,面向对象设计SOLID五大原则
- CF573E Bear and Bowling 贪心、分块、凸包
- Microsoft SQL Server 2008详细安装步骤
- java使用hdf.jar_在HDFView 2.14上查看使用h5py编写的大(12.5GB)HDF5文件
- 论基于架构的软件设计方法及应用
- Linux驱动开发|音频驱动
- 人工神经网络—神经元的数学模型
- 论文阅读 (四):MILIS: Multiple Instance Learning with Instance Selection.
- java web架构配置_javaweb(1) tomcat配置和web程序结构
热门文章
- 科研人必备的学术导航,不看后悔!
- mysql udf禁用_Mysql数据库UDF的安全问题利用
- js 返回上一页面_构建大型 Vue.js 项目的10条建议
- ZYNQ7000-GPIO EMIO中断实验 程序烧写后自动进一次中断的怪现象
- Java 8 forEach 示例
- 电路 | 抗干扰技术
- C语言 | 基于STM32的IIC代码实现(源代码)
- 温州大学瓯江学院 计算机院赛,温州大学
- html表单显示提示,html侧栏对应表单的提示显示
- linux内核优化哪些参数,linux内核参数优化 互联网技术圈 互联网技术圈