Java设计模式作业-责任链模式:Web过滤器
前言
在某 Web
框架中采用职责链模式来组织数据过滤器,不同的数据过滤器提供了不同的功能,例如字符编码转换过滤器、数据类型转换过滤器、数据校验过滤器等,可以将多个过滤器连接成一一个过滤器链,进而对数据进行多次处理。根据以上描述,绘制对应的类图并编程模拟实现。
一、类图
二、代码及测试结果
1.Trouble类
public class Trouble {
private int number;//定义trouble的类型,对应过滤器类型
public Trouble(int number){
this.number = number;
}
public int getNumber(){
return this.number;
}
public String toString(){
switch (number){
case 1: return "[Trouble " + number + " CheckTrouble]";
case 2: return "[Trouble " + number + " TypeTransformTrouble]";
case 3: return "[Trouble " + number + " TypeCheckTrouble]";
default: return "No such trouble";
}
}
}
2.Support类
public abstract class Support {
private String name;
private Support next;
public Support(String name){
this.name = name;
}
public Support setNext(Support next){
this.next = next;
return next;
}
public final void support(Trouble trouble){
if(resolve(trouble)){
done(trouble);
}else if(next != null){
next.support(trouble);
}else {
fail(trouble);
}
}
public String toString(){
return "[" + name + "]";
}
protected abstract boolean resolve(Trouble trouble);
protected void done(Trouble trouble){
System.out.println(trouble + " is resolved by " + this + ".");
}
protected void fail(Trouble trouble){
System.out.println(trouble + " cannot be resolved");
}
}
3.CharSupport类
public class CharSupport extends Support{
private int typeNum = 1;
public CharSupport(String name) {
super(name);
}
@Override
protected boolean resolve(Trouble trouble) {
if(trouble.getNumber() == typeNum){
return true;
}else {
return false;
}
}
}
4.TypeTransformSupport类
public class TypeTransformSupport extends Support{
private int typeNum = 2;
public TypeTransformSupport(String name) {
super(name);
}
@Override
protected boolean resolve(Trouble trouble) {
if(trouble.getNumber() == typeNum){
return true;
}else {
return false;
}
}
}
5.TypeCheckSupport类
public class TypeCheckSupport extends Support{
private int typeNum = 3;
public TypeCheckSupport(String name) {
super(name);
}
@Override
protected boolean resolve(Trouble trouble) {
if(trouble.getNumber() == typeNum){
return true;
}else {
return false;
}
}
}
6.Test类
public class Test {
public static void main(String[] args) {
Support charSupport = new CharSupport("charSupport");
Support typeTransformSupport = new TypeTransformSupport("typeTransformSupport");
Support typeCheckSupport = new TypeCheckSupport("typeCheckSupport");
charSupport.setNext(typeTransformSupport).setNext(typeCheckSupport);
for(int i = 1; i <= 4; i++){
charSupport.support(new Trouble(i));
}
}
}