상세 컨텐츠

본문 제목

Chain of Responsibility Pattern modified

Java

by techbard 2016. 7. 21. 14:11

본문

반응형

CoR02.zip



# Handler.java


import java.util.ArrayList;


public abstract class Handler {

    Handler nextHandler;

    

    protected void setNextHandler(Handler handler) {

this.nextHandler = handler;

    }

  

    protected void setNextHandlers(ArrayList<Handler> handlers) {

for (int i = 0; i < handlers.size() - 1; i++) {

   handlers.get(i).setNextHandler(handlers.get(i + 1));

}

    }

    

    abstract void checkRequest(Request request);

}



# Request.java


public class Request {

    private int requestValue = 0;


    public int getRequestValue() {

if (this.requestValue < 0) {

   this.requestValue = -this.requestValue;

}

        return this.requestValue;

    }


    public void setRequestValue(int requestValue) {

        this.requestValue = requestValue;

    }

}



# CheckEven.java


public class CheckEven extends Handler {


    @Override

    void checkRequest(Request request) {

int requested = request.getRequestValue();

if (requested > 0 && requested % 2 == 0) {

   System.out.println("[" + requested + "] is even");

} else {

   nextHandler.checkRequest(request);

}

    }

}



# CheckOdd.java


public class CheckOdd extends Handler {


    @Override

    void checkRequest(Request request) {

int requested = request.getRequestValue();

if (requested > 0 && requested % 2 != 0) {

   System.out.println("[" + requested + "] is odd");

} else {

   nextHandler.checkRequest(request);

}

    }

}



# CheckZero.java


public class CheckZero extends Handler {


    @Override

    void checkRequest(Request request) {

int requested = request.getRequestValue();

if (requested == 0) {

   System.out.println("[" + requested + "] is zero");

} else {

   nextHandler.checkRequest(request);

}

    }

}



# Main.java


import java.util.ArrayList;


public class Main {


    public static void main(String[] args) {

Request request = new Request();

CheckEven checkEven = new CheckEven();

CheckOdd checkOdd = new CheckOdd();

CheckZero checkZero = new CheckZero();

ArrayList<Handler> handlers = new ArrayList<>();

handlers.add(checkEven);

handlers.add(checkOdd);

handlers.add(checkZero);

handlers.get(0).setNextHandlers(handlers);

handlers.get(0).checkRequest(request);

request.setRequestValue(-21);

handlers.get(0).checkRequest(request);

request.setRequestValue(-2);

handlers.get(0).checkRequest(request);

    }

}



# 결과


[0] is zero

[21] is odd

[2] is even



반응형

관련글 더보기

댓글 영역