在开发程序中经常碰到这样的判断语句
public void doByType(int type){
if(type == 1){
System.out.println("do something1....");
}else if(type == 2){
System.out.println("do something2....");
}else {
System.out.println("do else....");
}
}
很多人都想不用if else这时候可以使用责任链模式。解决方法如下:
定义一个抽象的处理类
public abstract class Handler {
//后继处理对象
Handler successor;
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
//处理请求
protected abstract void handRequest(int arg);
}
定义type 等于1 的 处理类
public class Type1Handler extends Handler{
final int TYPE = 1;
@Override
public void handRequest( int arg) {
//如果arg == 1;则个具体处理者处理否则交给下一个处理者
if(arg == TYPE){
System.out.println("do something1....");
return;
}
if(this.getSuccessor() != null){
this.getSuccessor().handRequest(arg);
}
}
}
定义type 等于2 的 处理类
public class Type1Handler extends Handler{
final int TYPE =2;
@Override
public void handRequest( int arg) {
//如果arg == 2;则个具体处理者处理否则交给下一个处理者
if(arg == TYPE){
System.out.println("do something2....");
return;
}
if(this.getSuccessor() != null){
this.getSuccessor().handRequest(arg);
}
}
}
定义type 是其他数字的 处理类
@Override
public void handRequest( int arg) {
System.out.println("do else....");
return;
}
测试类如下。记得把else的处理类设置成最后
public class Client {
public static void main(String[] args) {
Handler type1Handler = new Type1Handler();
Handler type2Handler = new Type2Handler();
Handler elseHandler = new ElseHandler();
type1Handler.setSuccessor(type2Handler);
type2Handler.setSuccessor(elseHandler);
type1Handler.handRequest(1);
type1Handler.handRequest(222);
}
}
public void doByType(int type){
if(type == 1){
System.out.println("do something1....");
}else if(type == 2){
System.out.println("do something2....");
}else {
System.out.println("do else....");
}
}
很多人都想不用if else这时候可以使用责任链模式。解决方法如下:
定义一个抽象的处理类
public abstract class Handler {
//后继处理对象
Handler successor;
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
//处理请求
protected abstract void handRequest(int arg);
}
定义type 等于1 的 处理类
public class Type1Handler extends Handler{
final int TYPE = 1;
@Override
public void handRequest( int arg) {
//如果arg == 1;则个具体处理者处理否则交给下一个处理者
if(arg == TYPE){
System.out.println("do something1....");
return;
}
if(this.getSuccessor() != null){
this.getSuccessor().handRequest(arg);
}
}
}
定义type 等于2 的 处理类
public class Type1Handler extends Handler{
final int TYPE =2;
@Override
public void handRequest( int arg) {
//如果arg == 2;则个具体处理者处理否则交给下一个处理者
if(arg == TYPE){
System.out.println("do something2....");
return;
}
if(this.getSuccessor() != null){
this.getSuccessor().handRequest(arg);
}
}
}
定义type 是其他数字的 处理类
@Override
public void handRequest( int arg) {
System.out.println("do else....");
return;
}
测试类如下。记得把else的处理类设置成最后
public class Client {
public static void main(String[] args) {
Handler type1Handler = new Type1Handler();
Handler type2Handler = new Type2Handler();
Handler elseHandler = new ElseHandler();
type1Handler.setSuccessor(type2Handler);
type2Handler.setSuccessor(elseHandler);
type1Handler.handRequest(1);
type1Handler.handRequest(222);
}
}