Mod penapis pemintasan


Corak Penapis Memintas

Corak Penapis Memintas digunakan untuk melakukan beberapa pra-pemprosesan/pasca pemprosesan permintaan atau respons aplikasi. Penapis ditakrifkan dan digunakan pada permintaan sebelum ia dihantar ke aplikasi sasaran sebenar. Penapis boleh melakukan pengesahan/kebenaran/pengelogan, atau menjejaki permintaan, dan kemudian menghantar permintaan kepada pengendali yang sesuai. Berikut ialah entiti bagi corak reka bentuk ini.

  • Penapis - Penapis melaksanakan tugas tertentu sebelum atau selepas pengendali permintaan melaksanakan permintaan.

  • Rantai Penapis - Rantaian penapis mengambil berbilang penapis dan melaksanakannya dalam susunan yang ditetapkan pada Sasaran.

  • Sasaran - Objek Sasaran ialah pengendali permintaan.

  • Pengurus Penapis - Pengurus Penapis menguruskan penapis dan rantai penapis.

  • Klien - Klien ialah objek yang menghantar permintaan kepada objek Sasaran.

Melaksanakan

kami akan mencipta FilterChain, FilterManager, Sasaran, Klien sebagai pelbagai objek yang mewakili entiti. AuthenticationFilter dan DebugFilter mewakili penapis entiti.

InterceptingFilterDemo, kelas demo kami menggunakan Client untuk menunjukkan corak reka bentuk penapis memintas.

interceptingfilter_pattern_uml_diagram.jpg

Langkah 1

Buat Penapis antara muka penapis.

Filter.java

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

Langkah 2

Buat penapis entiti.

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

Langkah 3

Buat Sasaran.

Target.java

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

Langkah 4

Buat rantai penapis.

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

Langkah 5

Buat pengurus penapis.

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

Langkah 6

Buat Pelanggan klien.

Client.java

public class Client {
   FilterManager filterManager;

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

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

Langkah 7

Gunakan Client untuk menunjukkan corak reka bentuk penapis pemintas.

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

Langkah 8

Sahkan output.

rreeee