使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止
Handler.java
package com.gary.designpattern.cor;
/**
* 处理请求的接口
* @author gary
*
*/
public abstract class Handler {
protected Handler handler;
public void setHandler(Handler handler){
this.handler = handler;
}
//处理请求的抽象方法
public abstract void handle(char data);
}
NumberHandler.java
package com.gary.designpattern.cor;
/**
* 处理数字
* @author gary
*
*/
public class NumberHandler extends Handler {
@Override
public void handle(char data) {
if(data >= '0' && data <= '9'){
System.out.println("数字");
}
//不能处理,向下一级传递请求
else if(handler != null){
handler.handle(data);
}
}
}
LetterHandler.java
package com.gary.designpattern.cor;
/**
* 处理字母
* @author gary
*
*/
public class LetterHandler extends Handler {
@Override
public void handle(char data) {
if((data >= 'A' && data <= 'Z') || (data >= 'a' && data <= 'z')){
System.out.println("字母");
}
//不能处理,向下一级传递请求
else if(handler != null){
handler.handle(data);
}
}
}
DefaultHandler.java
package com.gary.designpattern.cor;
/**
* 处理其他字符
* @author gary
*
*/
public class DefaultHandler extends Handler {
@Override
public void handle(char data) {
System.out.println("其它");
}
}
Test.java
package com.gary.designpattern.cor;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
Handler numberHandler = new NumberHandler();
Handler letterHandler = new LetterHandler();
Handler defaultHandler = new DefaultHandler();
numberHandler.setHandler(letterHandler);
letterHandler.setHandler(defaultHandler);
numberHandler.handle('3');
System.out.println("=======split======");
numberHandler.handle('g');
System.out.println("=======split======");
numberHandler.handle('.');
}
}