[자바 디자인 패턴] 행동패턴 - 책임연쇄패턴

2021. 3. 15. 17:09 JAVA/Design Patterns

행동패턴 목록

 

처음에 여러 절차에 따라서 테스트를 하기 위한 경우에도 이렇게 책임 연쇄패턴을 써서 돌려봐도 좋을 것 같다. 유연성도 있고, 하나의 클래스가 하나의 역할을 하기 때문에 여러가지 작업을 하나하나 적용하고 순서도 바꾸어 보면서 적절한지 테스트를 할 수 있을 것 같다.

 

장점

 - 결합이 감소합니다.

 - 책임을 객체에 할당하면서 유연성을 추가합니다.

 - 하나의 클래스가 하나의 역할을 하도록 허용합니다.

 - 한 클래스에서 생성된 이벤트는 작성을 통해 다른 핸들러 클래스로 보낼 수 있습니다.

 

사용시기

 - 둘 이상의 객체가 요청을 처리할 수 있고 핸들러를 알 수 없는 경우

 - 요청을 처리할 수 있는 그룹을 동적으로 지정해야하는 경우

 

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"); 
    }  
}

 

출처 : https://www.javatpoint.com/

blog.codeoctopus.net/46