Intercepting Filter Pattern

2021, Sep 09    

Intercepting Filter Pattern

Interception Filter Pattern

  • 체인으로 묶인 필터를 통과하면서 최종적으로 Target 클래스에 도달하도록 한다.
  • 전처리/후처리를 수행하려고 하는 경우 사용

Entity.

Filter::

실제로 필터작업을 구현하고, 실행

public class AppChannelFilter implements BusinessMessageFilter {  // 특정 App채널만 유효하도록 필터링
    private final AppChannelTypeValidator appChannelTypeValidator;

    @Override
    public void execute(ConversationMessage conversationMessage) {
        appChannelTypeValidator.validate();
    }
}

Filter Chain::

여러 필터들을 순서대로 실행하기 위해 체인으로 묶음

Target::

모든 필터가 통과되면 최종적으로 실행될 엔티티

Filter Manager::

여러 필터들과 필터 체인을 연결

public class BusinessMessageFilterManager {
    private final List<BusinessMessageFilter> businessMessageFilters;

    public void execute(ConversationMessage conversationMessage){
        for (BusinessMessageFilter businessMessageFilter : businessMessageFilters) {
            businessMessageFilter.execute(conversationMessage);
        }
    }
}

Client::

필터요청하는 엔티티

public class BtalkMessageFilterExecutor {
    private final BusinessMessageFilterManager businessMessageFilterManager;

    public void filter(ConversationMessage conversationMessage) {
        businessMessageFilterManager.execute(conversationMessage);
    }
}

참고.

https://www.tutorialspoint.com/design_pattern/intercepting_filter_pattern.htm