Dạng thiết kế - Dạng bộ lọc chặn

Mẫu thiết kế bộ lọc chặn được sử dụng khi chúng ta muốn thực hiện một số xử lý trước / xử lý sau với yêu cầu hoặc phản hồi của ứng dụng. Bộ lọc được xác định và áp dụng theo yêu cầu trước khi chuyển yêu cầu đến ứng dụng đích thực tế. Bộ lọc có thể thực hiện xác thực / ủy quyền / ghi nhật ký hoặc theo dõi yêu cầu và sau đó chuyển các yêu cầu đến các trình xử lý tương ứng. Sau đây là các thực thể của kiểu thiết kế này.

  • Filter - Bộ lọc sẽ thực hiện nhiệm vụ nhất định trước hoặc sau khi thực hiện yêu cầu bởi trình xử lý yêu cầu.

  • Filter Chain - Chuỗi Bộ lọc mang nhiều bộ lọc và giúp thực thi chúng theo thứ tự xác định trên mục tiêu.

  • Target - Đối tượng đích là trình xử lý yêu cầu

  • Filter Manager - Trình quản lý Bộ lọc quản lý bộ lọc và Chuỗi bộ lọc.

  • Client - Client là đối tượng gửi yêu cầu đến đối tượng Target.

Thực hiện

Chúng ta sẽ tạo một FilterChain , FilterManager , Target , Client dưới dạng các đối tượng khác nhau đại diện cho các thực thể của chúng ta. AuthenticationFilterDebugFilter đại diện cho các bộ lọc bê tông.

InterceptingFilterDemo , lớp demo của chúng tôi, sẽ sử dụng Client để chứng minh Mẫu thiết kế bộ lọc chặn.

Bước 1

Tạo giao diện Bộ lọc.

Filter.java

public interface Filter {
   public void execute(String request);
}

Bước 2

Tạo bộ lọc bê tông.

AuthenticationFilter.java

public class AuthenticationFilter implements Filter {
   public void execute(String request){
      System.out.println("Authenticating request: " + request);
   }
}

DebugFilter.java

public class DebugFilter implements Filter {
   public void execute(String request){
      System.out.println("request log: " + request);
   }
}

Bước 3

Tạo mục tiêu

Target.java

public class Target {
   public void execute(String request){
      System.out.println("Executing request: " + request);
   }
}

Bước 4

Tạo chuỗi bộ lọc

FilterChain.java

import java.util.ArrayList;
import java.util.List;

public class FilterChain {
   private List<Filter> filters = new ArrayList<Filter>();
   private Target target;

   public void addFilter(Filter filter){
      filters.add(filter);
   }

   public void execute(String request){
      for (Filter filter : filters) {
         filter.execute(request);
      }
      target.execute(request);
   }

   public void setTarget(Target target){
      this.target = target;
   }
}

Bước 5

Tạo trình quản lý bộ lọc

FilterManager.java

public class FilterManager {
   FilterChain filterChain;

   public FilterManager(Target target){
      filterChain = new FilterChain();
      filterChain.setTarget(target);
   }
   public void setFilter(Filter filter){
      filterChain.addFilter(filter);
   }

   public void filterRequest(String request){
      filterChain.execute(request);
   }
}

Bước 6

Tạo khách hàng

Client.java

public class Client {
   FilterManager filterManager;

   public void setFilterManager(FilterManager filterManager){
      this.filterManager = filterManager;
   }

   public void sendRequest(String request){
      filterManager.filterRequest(request);
   }
}

Bước 7

Sử dụng Máy khách để chứng minh Mẫu thiết kế bộ lọc chặn.

InterceptingFilterDemo.java

public class InterceptingFilterDemo {
   public static void main(String[] args) {
      FilterManager filterManager = new FilterManager(new Target());
      filterManager.setFilter(new AuthenticationFilter());
      filterManager.setFilter(new DebugFilter());

      Client client = new Client();
      client.setFilterManager(filterManager);
      client.sendRequest("HOME");
   }
}

Bước 8

Xác minh kết quả đầu ra.

Authenticating request: HOME
request log: HOME
Executing request: HOME