بخش های اصلی

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

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

مبحث آموزشی

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

Learn Design Patterns

سرفصل ها

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

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

تبلیغات

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

https://telegram.me/softskill_ir

آخرین مقالات

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

خبـرنــامه

Newsletters

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