责任链模式如何在Java项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
责任链模式主要包括以下几个角色
1、处理者:处理者是一个接口,负责规定具体处理者处理用户请求的方法以及具体处理者设置后继处理对象的方法
2、具体处理者:具体处理者是实现处理接口的类的实例,具体处理者通过调用处理接口规定的方法处理用户的请求,既在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中,如果发现能处理用户的请求,就处理用户的请求。如果发现处理不了就交给下一个处理者进行处理。
例如一个图书检索的程序,根据图书类别将图书分为了N个种类,然后创建若干个种类的对象,每个对象对一个种类进行检索。为了能更好的管理这些对象,可以将这额对象组织成一个责任链,当用户需要鉴定书籍时,系统可以让责任链上的第一个对象来处理用户的请求,这个对象首先检索自己是否能够处理用户的请求,如果能处理就反馈并返回处理内容。如果不能处理则交给下一个处理对象进行处理。
package org.zhy.design.demo;
/**
* 处理接口
* @author zhengyi
*
*/
public interface Handler {
//根据书的ID进行检索
public abstract void Search(int id);
//下一个处理者 参数为实现处理接口的实现类
public abstract void nextHandler(Handler han);
}
package org.zhy.design.demo;
import java.util.ArrayList;
import java.util.List;
/**
* 文学类的书籍检索
* @author zhengyi
*
*/
public class WenXue implements Handler{
private Handler han;//下一个处理者
private List<Integer> list; //模拟文学类书籍的编号
public WenXue(){
list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
}
@Override
public void nextHandler(Handler han) {
this.han=han; //给下一个处理者赋值
}
@Override
public void Search(int id) {
if(list.contains(id)){ //检索list中是否存在此ID的书籍,如果存在则打印
System.out.println("恭喜您,您检索的书籍是文学类的");
}else{ //如果没有此书籍则交给下一个处理者进行处理
if(han!=null){
han.Search(id);
}
}
}
}
package org.zhy.design.demo;
import java.util.ArrayList;
import java.util.List;
/**
* 计算机类的书籍
* @author zhengyi
*
*/
public class JiSuanJi implements Handler {
private Handler han;
private List<Integer> list;
public JiSuanJi(){
list=new ArrayList<Integer>();
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
}
@Override
public void nextHandler(Handler han) {
this.han=han;
}
@Override
public void Search(int id) {
if(list.contains(id)){
System.out.println("恭喜你,此书记在计算机类");
}else{
if(han!=null){
han.Search(id);
}
}
}
}
package org.zhy.design.demo;
public class Appliction {
private Handler jisuanji,wenxue;
public void createHandler(){
jisuanji=new JiSuanJi();
wenxue=new WenXue();
jisuanji.nextHandler(wenxue); //指定下一个处理者
}
public void search(int id){
jisuanji.Search(id); //第一个处理者进行筛选处理
}
public static void main(String[] args) {
Appliction app=new Appliction();
app.createHandler();
app.search(10);
}
}
适合使用责任链模式的情况
1、在许多对象可以处理用户请求的时候
2、希望用户不必明确处理者的时候,同时向多个处理者发送请求
3、程序希望动态的订制可处理用户请求的集合对象
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。