Wzorzec projektowy - przechwytujący wzorzec filtru
Wzorzec projektowania filtru przechwytującego jest używany, gdy chcemy wykonać pewne przetwarzanie wstępne / końcowe z żądaniem lub odpowiedzią aplikacji. Filtry są definiowane i stosowane na żądanie przed przekazaniem żądania do rzeczywistej aplikacji docelowej. Filtry mogą wykonywać uwierzytelnianie / autoryzację / rejestrowanie lub śledzenie żądania, a następnie przekazywać żądania do odpowiednich programów obsługi. Poniżej znajdują się elementy tego typu wzorca projektowego.
Filter - Filtr, który wykona określone zadanie przed lub po wykonaniu żądania przez osobę obsługującą żądania.
Filter Chain - Łańcuch filtrów zawiera wiele filtrów i pomaga wykonać je w określonej kolejności w celu.
Target - Obiekt docelowy to osoba obsługująca żądania
Filter Manager - Menedżer filtrów zarządza filtrami i łańcuchem filtrów.
Client - Klient to obiekt, który wysyła żądanie do obiektu docelowego.
Realizacja
Zamierzamy stworzyć FilterChain , FilterManager , Target , Client jako różne obiekty reprezentujące nasze encje. AuthenticationFilter i DebugFilter reprezentują konkretne filtry.
InterceptingFilterDemo , nasza klasa demonstracyjna, użyje Client do zademonstrowania wzorca projektowego filtru przechwytującego.
Krok 1
Utwórz interfejs filtru.
Filter.java
public interface Filter {
public void execute(String request);
}
Krok 2
Twórz filtry betonowe.
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);
}
}
Krok 3
Utwórz cel
Target.java
public class Target {
public void execute(String request){
System.out.println("Executing request: " + request);
}
}
Krok 4
Utwórz łańcuch filtrów
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;
}
}
Krok 5
Utwórz Menedżera filtrów
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);
}
}
Krok 6
Utwórz klienta
Client.java
public class Client {
FilterManager filterManager;
public void setFilterManager(FilterManager filterManager){
this.filterManager = filterManager;
}
public void sendRequest(String request){
filterManager.filterRequest(request);
}
}
Krok 7
Użyj klienta, aby zademonstrować wzorzec projektowy filtru przechwytującego.
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");
}
}
Krok 8
Sprawdź dane wyjściowe.
Authenticating request: HOME
request log: HOME
Executing request: HOME