[자바 디자인 패턴] 행동패턴 - 책임연쇄패턴
행동패턴 목록
- 책임연쇄 패턴 (Chan of Responsibility Pattern)
- 커맨드 패턴 (Command Pattern)
- 해석자 패턴 (Interpreter Pattern)
- 반복자 패턴 (Iterator Pattern)
- 중재자 패턴 (Mediator Pattern)
- 메멘토 패턴 (Memento Pattern)
- 관찰자 패턴 (Observer Pattern)
- 상태 패턴 (State Pattern)
- 전략 패턴 (Strategy Pattern)
- 템플릿 패턴 (Template Pattern)
처음에 여러 절차에 따라서 테스트를 하기 위한 경우에도 이렇게 책임 연쇄패턴을 써서 돌려봐도 좋을 것 같다. 유연성도 있고, 하나의 클래스가 하나의 역할을 하기 때문에 여러가지 작업을 하나하나 적용하고 순서도 바꾸어 보면서 적절한지 테스트를 할 수 있을 것 같다.
장점
- 결합이 감소합니다.
- 책임을 객체에 할당하면서 유연성을 추가합니다.
- 하나의 클래스가 하나의 역할을 하도록 허용합니다.
- 한 클래스에서 생성된 이벤트는 작성을 통해 다른 핸들러 클래스로 보낼 수 있습니다.
사용시기
- 둘 이상의 객체가 요청을 처리할 수 있고 핸들러를 알 수 없는 경우
- 요청을 처리할 수 있는 그룹을 동적으로 지정해야하는 경우
UML
Model Class : Logger, ConsoleBasedLogger, ErrorBasedLogger, DebugBasedLogger
public abstract class Logger {
public static int OUTPUTINFO=1;
public static int ERRORINFO=2;
public static int DEBUGINFO=3;
protected int levels;
protected Logger nextLevelLogger;
public void setNextLevelLogger(Logger nextLevelLogger) {
this.nextLevelLogger = nextLevelLogger;
}
public void logMessage(int levels, String msg){
if(this.levels<=levels){
displayLogInfo(msg);
}
if (nextLevelLogger!=null) {
nextLevelLogger.logMessage(levels, msg);
}
}
protected abstract void displayLogInfo(String msg);
}
public class ConsoleBasedLogger extends Logger {
public ConsoleBasedLogger(int levels) {
this.levels=levels;
}
@Override
protected void displayLogInfo(String msg) {
System.out.println("CONSOLE LOGGER INFO: "+msg);
}
}
public class DebugBasedLogger extends Logger {
public DebugBasedLogger(int levels) {
this.levels=levels;
}
@Override
protected void displayLogInfo(String msg) {
System.out.println("DEBUG LOGGER INFO: "+msg);
}
}
public class ErrorBasedLogger extends Logger {
public ErrorBasedLogger(int levels) {
this.levels=levels;
}
@Override
protected void displayLogInfo(String msg) {
System.out.println("ERROR LOGGER INFO: "+msg);
}
}
Operation Class : ChinofResponsibilityClient
public class ChainofResponsibilityClient {
private static Logger doChaining(){
Logger consoleLogger = new ConsoleBasedLogger(Logger.OUTPUTINFO);
Logger errorLogger = new ErrorBasedLogger(Logger.ERRORINFO);
consoleLogger.setNextLevelLogger(errorLogger);
Logger debugLogger = new DebugBasedLogger(Logger.DEBUGINFO);
errorLogger.setNextLevelLogger(debugLogger);
return consoleLogger;
}
public static void main(String args[]){
Logger chainLogger= doChaining();
chainLogger.logMessage(Logger.OUTPUTINFO, "Enter the sequence of values ");
chainLogger.logMessage(Logger.ERRORINFO, "An error is occured now");
chainLogger.logMessage(Logger.DEBUGINFO, "This was the error now debugging is compeled");
}
}
'JAVA > Design Patterns' 카테고리의 다른 글
[자바 디자인 패턴] 행동패턴 - 중재자 패턴 (0) | 2021.03.15 |
---|---|
[자바 디자인 패턴] 행동패턴 - 반복자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 해석자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 커맨드 패턴 (0) | 2021.03.15 |
[DesignPattern] 옵서버 패턴 (0) | 2020.07.06 |
[DesignPattern] 팩토리 메서드 패턴 (0) | 2020.07.06 |
[DesignPattern] 템플릿 메서드 패턴 (0) | 2020.07.06 |
[DesignPattern] 프록시 패턴 (0) | 2020.07.06 |