Entwurfsmuster - Abfangen des Filtermusters

Das Entwurfsmuster für das Abfangen von Filtern wird verwendet, wenn eine Vorverarbeitung / Nachbearbeitung mit Anforderung oder Antwort der Anwendung durchgeführt werden soll. Filter werden definiert und auf die Anforderung angewendet, bevor die Anforderung an die tatsächliche Zielanwendung übergeben wird. Filter können die Authentifizierung / Autorisierung / Protokollierung oder Nachverfolgung von Anforderungen durchführen und die Anforderungen dann an die entsprechenden Handler weiterleiten. Im Folgenden sind die Entitäten dieser Art von Entwurfsmuster aufgeführt.

  • Filter - Filter, der bestimmte Aufgaben vor oder nach der Ausführung der Anforderung durch den Anforderungshandler ausführt.

  • Filter Chain - Die Filterkette enthält mehrere Filter und hilft, diese in definierter Reihenfolge auf dem Ziel auszuführen.

  • Target - Zielobjekt ist der Anforderungshandler

  • Filter Manager - Filter Manager verwaltet die Filter und die Filterkette.

  • Client - Client ist das Objekt, das eine Anforderung an das Zielobjekt sendet.

Implementierung

Wir werden FilterChain , FilterManager , Target , Client als verschiedene Objekte erstellen , die unsere Entitäten darstellen. AuthenticationFilter und DebugFilter repräsentieren konkrete Filter.

InterceptingFilterDemo , unsere Demo-Klasse, verwendet Client , um das Intercepting Filter Design Pattern zu demonstrieren.

Schritt 1

Filterschnittstelle erstellen.

Filter.java

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

Schritt 2

Erstellen Sie konkrete Filter.

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

Schritt 3

Ziel erstellen

Target.java

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

Schritt 4

Filterkette erstellen

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

Schritt 5

Erstellen Sie den Filter-Manager

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

Schritt 6

Client erstellen

Client.java

public class Client {
   FilterManager filterManager;

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

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

Schritt 7

Verwenden Sie den Client , um das Intercepting Filter Design Pattern zu demonstrieren.

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

Schritt 8

Überprüfen Sie die Ausgabe.

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