بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Intercepting Filter

الگوی intercepting filter هنگامی که میخوایم برای درخواست یا پاسخ به برنامه، پیش پردازش/پس پردازش انجام بدیم به کار میره. فیلترها قبل از پاس دادن درخواست به برنامه ی هدفِ اصلی، روی پردازش اعمال میشن. فیلترها می توانند اهراز هویت/ صدور مجوز/ ورود یا پیگیریِ درخواست را انجام بدن و بعد درخواست را به کنترل کننده های مربوطه پاس بدن. موارد زیر، موجودیت های این نوع الگوی طراحی اند:

  • Filter – Filter برخی وظایف (task)ها را قبل یا بعد از اجرای درخواست توسط کنترل کننده ی درخواست، اجرا می کنه.
  • Filter Chain – Filter Chain، چندین Filter را در خودش نگه میداره و در دستور تعریف شده ی مقصد، به اجرای آن ها کمک می کنه.
  • Target – شیءِ Target، کنترل کننده ی درخواستِه.
  • Filter Manager – Filter Manager، Filterها و Filter Chainها را مدیریت می کنه.
  • Client – Client، شیء ایِه که برای شیءِ Target، درخواست می فرسته.

پیاده سازی

در این بخش یک FilterChain، FilterManager، Target و Client بعنوان شیء های مختلفی که موجودیت هایمان را نمایش میدن، ایجاد می کنیم. AuthenticationFilter و DebugFilter، فیلترهای concrete را ارائه میدن.

InterceptingFilterDemo، در نسخه ی آزمایشی کلاس مان از Client برای نشان دادن الگوی طراحیِ Intercepting Filter استفاده خواهیم کرد.

intercepting filter pattern uml diagram

مرحله ی 1

ایجاد رابطِ Filter.

Filter.java

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

مرحله ی 2

ایجاد کلاس های concrete 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);
   }
}

مرحله ی 3

ایجادِ Target.

Target.java

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

مرحله ی 4

ایجادِ Filter Chain.

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

مرحله ی 5

ایجادِ 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);
   }
}

مرحله ی 6

ایجادِ Client.

Client.java

public class Client {
   FilterManager filterManager;

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

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

مرحله ی 7

استفاده از Client برای نشان دادن الگوی طراحیِ Intercepting Filter.

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

مرحله ی 8

بررسی خروجی

Authenticating request: HOME
request log: HOME
Executing request: HOME
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد