1、理解:所谓责任连模式就是所当事件发生的时候,有人对事件进行处理;
2、处理方式:可以是先给对A处理,然后再给B处理,再给C处理,ABC处理的结果可以有关系,也可以没有关系
3、转换为代码:
2、处理方式:可以是先给对A处理,然后再给B处理,再给C处理,ABC处理的结果可以有关系,也可以没有关系
3、转换为代码:
- 首先将事件接收者都抽象出一个类,这个类的作用是①能够获得事件接收者②能够抽象事件实现方法③能够在接受事件之后去调用方法同时将事件传递给下一个事件接收者
- 事件接收者在接收事件之后重写抽象类中的方法实现具体的对事件的处理
例题如下(来自:https://www.w3cschool.cn/java/java-chain-of-responsibility-pattern.html)
//先抽象类:
public abstract class Logger {
protected Logger nextLogger;//下属
public void setNextLogger(Logger nextLogger) {
this.nextLogger = nextLogger;
}
abstract protected void log(String message);
public void logMessage(String message){
log(message);
if(nextLogger !=null){
nextLogger.logMessage(message);
}
}
}
//再设计抽象类的子类:
public class EMailLogger extends Logger{
public EMailLogger() {
// TODO Auto-generated constructor stub
}
@Override
protected void log(String message) {
System.out.println("EMail::Logger: " + message);
}
}
public class FileLogger extends Logger{
public FileLogger() {
// TODO Auto-generated constructor stub
}
@Override
protected void log(String message) {
System.out.println("File::Logger: " + message);
}
}
public class ConsoleLogger extends Logger{
public ConsoleLogger() {
// TODO Auto-generated constructor stub
}
@Override
protected void log(String message) {
System.out.println("Console::Logger: " + message);
}
}
//最后编写一个测试类查看效果:
public class Main {
private static Logger getChainOfLoggers(){
Logger emailLogger=new EMailLogger();
Logger fileLogger=new FileLogger();
Logger consoleLogger=new ConsoleLogger();
emailLogger.setNextLogger(fileLogger);//设置对应下属
fileLogger.setNextLogger(consoleLogger);//设置对应下属
return emailLogger;
}
public static void main(String[] args) {
Logger loggerChain=getChainOfLoggers();
loggerChain.logMessage("第一个命令");
}
}
总结:就是给你一个事件,你先处理事件,然后获取下一个处理事件的人,然后让这个人来处理事件,依次循环