设计模式之责任链模式
2015-12-16 00:00
387 查看
摘要: 责任链模式是一种非常有用的模式。一般分为纯责任链模式,非纯责任链模式。区别只是前者要么处理,要么移交给下一个处理。不存在既处理又交给下一个处理。
责任链原型非常简单,其实就是把可以处理的类串成一个链表,然后依次判断执行或者交给链接的下一个。
责任链模式是一种非常有用的模式。一般分为纯责任链模式,非纯责任链模式。区别只是前者要么处理,要么移交给下一个处理。不存在既处理又交给下一个处理。
责任链原型非常简单,其实就是把可以处理的类串成一个链表,然后依次判断执行或者交给链接的下一个。
直接上代码:
一、纯的责任链模式:
报销大家都遇到过,如果小于1w的由部门经理审核,1W和10W之间由总经理审核,10W及以上由CEO审核。
1.抽象经理
2.CEO
3.部门经理
4.总经理
5.测试
结果就是
5.1 小于1W的
DepartmentManager check the money
5.2 大于等于1w小于10w的
General manager check the money.....
5.4 大于等于10w的
CEO check the money.....
一、不纯的责任链模式:
1.抽象过滤器
2.日志过滤器
3.session过滤器
4.请求信息
5.测试代码
责任链原型非常简单,其实就是把可以处理的类串成一个链表,然后依次判断执行或者交给链接的下一个。
责任链模式是一种非常有用的模式。一般分为纯责任链模式,非纯责任链模式。区别只是前者要么处理,要么移交给下一个处理。不存在既处理又交给下一个处理。
责任链原型非常简单,其实就是把可以处理的类串成一个链表,然后依次判断执行或者交给链接的下一个。
直接上代码:
一、纯的责任链模式:
报销大家都遇到过,如果小于1w的由部门经理审核,1W和10W之间由总经理审核,10W及以上由CEO审核。
1.抽象经理
public abstract class AbstractManager { private AbstractManager nextPoint; public abstract void check(double money); public AbstractManager getNextPoint() { return nextPoint; } public void setNextPoint(AbstractManager nextPoint) { this.nextPoint = nextPoint; } }
2.CEO
public class CEO extends AbstractManager { @Override public void check(double money) { if (money >= 100000) { System.out.println("CEO check the money....."); } else { if (getNextPoint() != null) { getNextPoint().check(money); } } } }
3.部门经理
public class DepartmentManager extends AbstractManager { @Override public void check(double money) { if (money < 10000) { System.out.println("DepartmentManager check the money"); } else { if (getNextPoint() != null) { getNextPoint().check(money); } } } }
4.总经理
public class GeneralManager extends AbstractManager { @Override public void check(double money) { if (money >= 10000 && money < 100000) { System.out.println("General manager check the money ....."); } else { if (getNextPoint() != null) { getNextPoint().check(money); } } } }
5.测试
public static void main(String[] args) { AbstractManager ceo = new CEO(); AbstractManager departmentManager = new DepartmentManager(); AbstractManager generalManager = new GeneralManager(); //创建责任链 departmentManager.setNextPoint(generalManager); generalManager.setNextPoint(ceo); //直接交给部门经理处理,其他就不用管啦。 departmentManager.check(999999); }
结果就是
5.1 小于1W的
DepartmentManager check the money
5.2 大于等于1w小于10w的
General manager check the money.....
5.4 大于等于10w的
CEO check the money.....
一、不纯的责任链模式:
1.抽象过滤器
public abstract class Filter { private Filter nextFilter; public abstract void handle(Request request); public Filter getNextFilter() { return nextFilter; } public void setNextFilter(Filter nextFilter) { this.nextFilter = nextFilter; } }
2.日志过滤器
public class LogFilter extends Filter { @Override public void handle(Request request) { if (request.getUrl() != null && request.getUrl().contains("payBill")) { System.out.println("log write payBill"); } if (getNextFilter() != null) { getNextFilter().handle(request); } } }
3.session过滤器
public class SessionFilter extends Filter { @Override public void handle(Request request) { if (request.getSessionId() == null) { System.out.println("session id is none, check the username and password."); System.out.println("username and password check successful"); } else { System.out.println("session id check pass"); } if (getNextFilter() != null) { getNextFilter().handle(request); } } }
4.请求信息
public class Request { private String userName; private String password; private String sessionId; private String content; private String charSet; private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getCharSet() { return charSet; } public void setCharSet(String charSet) { this.charSet = charSet; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSessionId() { return sessionId; } public void setSessionId(String sessionId) { this.sessionId = sessionId; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
5.测试代码
public static void main(String[] args) throws UnsupportedEncodingException { Filter charSetFilter = new CharacterFilter(); Filter logFilter = new LogFilter(); Filter sessionFilter = new SessionFilter(); sessionFilter.setNextFilter(logFilter); logFilter.setNextFilter(charSetFilter); Request req = new Request(); req.setContent("今天天气不错"); req.setSessionId("1111"); req.setCharSet("GBK"); req.setUserName("lubby"); req.setPassword("Jack1234565"); req.setUrl("/payBill"); sessionFilter.handle(req); }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树