Latest web development tutorials

필터 패턴

필터 모드 (필터 패턴) 또는 표준 모드 (기준 패턴) 개발자들을 연결하는 방법을 분리하는 논리 연산을 통해 객체 세트를 필터링하기 위해 다른 기준을 사용할 수 있도록 디자인 모델이다. 이상의 조건은 단일 표준을 구하는 결합 구조 스키마 디자인 패턴이 유형.

실현

우리는사람의개체 목록을 필터링 할 인터페이스의Person객체, 기준 엔티티 클래스 인터페이스와 구현을 작성합니다.CriteriaPatternDemo,우리 데모 클래스오브젝트의리스트를 필터링하는 다양한 기준 및 이들의 조합에 기초하여기준물체를 사용.

필터 패턴 UML 다이어그램

1 단계

이 클래스의 표준 응용 프로그램에 클래스를 만듭니다.

Person.java

공용 클래스 사람 {
	
   개인 문자열 이름;
   개인 문자열 성;
   개인 문자열 maritalStatus;

   공공 사람 (문자열 이름, 문자열 성별, 문자열 maritalStatus) {
      this.name = 이름;
      this.gender는 성별 =;
      this.maritalStatus = maritalStatus;		
   }

   공공 문자열 getName () {
      이름을 반환;
   }
   공공 문자열 getGender () {
      성별을 반환;
   }
   공공 문자열 getMaritalStatus () {
      maritalStatus를 반환;
   }	
}

2 단계

표준 (기준)에 대한 인터페이스를 만듭니다.

Criteria.java

가져 오기를 java.util.List;

공용 인터페이스 기준 {
   공개 목록 <사람> meetCriteria (목록 <사람> 사람);
}

3 단계

기준 인터페이스구현 엔티티 클래스를 만듭니다.

CriteriaMale.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 CriteriaMale는 기준 {구현

   @Override
   공개 목록 <사람> meetCriteria (목록 <사람> 사람) {
      목록 <사람> malePersons = 새로운 ArrayList를 <사람> (); 
      {: (사람 사람 사람)에 대한
         (person.getGender (). equalsIgnoreCase ( "MALE")) {경우
            malePersons.add (사람);
         }
      }
      malePersons를 반환;
   }
}

CriteriaFemale.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 CriteriaFemale는 기준 {구현

   @Override
   공개 목록 <사람> meetCriteria (목록 <사람> 사람) {
      목록 <사람> femalePersons = 새로운 ArrayList를 <사람> (); 
      {: (사람 사람 사람)에 대한
         (person.getGender (). equalsIgnoreCase ( "FEMALE")) {경우
            femalePersons.add (사람);
         }
      }
      femalePersons를 반환;
   }
}

CriteriaSingle.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 CriteriaSingle는 기준 {구현

   @Override
   공개 목록 <사람> meetCriteria (목록 <사람> 사람) {
      목록 <사람> singlePersons = 새로운 ArrayList를 <사람> (); 
      {: (사람 사람 사람)에 대한
         (person.getMaritalStatus (). equalsIgnoreCase ( "SINGLE")) {경우
            singlePersons.add (사람);
         }
      }
      singlePersons를 반환;
   }
}

AndCriteria.java

가져 오기를 java.util.List;

공용 클래스 AndCriteria는 기준 {구현

   개인 기준 기준;
   개인 기준 otherCriteria;

   공공 AndCriteria (기준 기준 기준 otherCriteria) {
      this.criteria = 기준;
      this.otherCriteria = otherCriteria; 
   }

   @Override
   공개 목록 <사람> meetCriteria (목록 <사람> 사람) {
      목록 <사람> firstCriteriaPersons = criteria.meetCriteria (명);		
      otherCriteria.meetCriteria (firstCriteriaPersons)을 반환;
   }
}

OrCriteria.java

가져 오기를 java.util.List;

공용 클래스 OrCriteria는 기준 {구현

   개인 기준 기준;
   개인 기준 otherCriteria;

   공공 OrCriteria (기준 기준 기준 otherCriteria) {
      this.criteria = 기준;
      this.otherCriteria = otherCriteria; 
   }

   @Override
   공개 목록 <사람> meetCriteria (목록 <사람> 사람) {
      목록 <사람> firstCriteriaItems = criteria.meetCriteria (명);
      목록 <사람> otherCriteriaItems = otherCriteria.meetCriteria (명);

      {(otherCriteriaItems 사람 사람)에 대한
         만약 (! firstCriteriaItems.contains (사람)) {
	        firstCriteriaItems.add (사람);
         }
      }	
      firstCriteriaItems를 반환;
   }
}

4 단계

사람개체 목록을 필터링하는 이들 다양한 기준 (기준) 및 이들의 조합을 사용.

CriteriaPatternDemo.java

import java.util.ArrayList; 
import java.util.List;

public class CriteriaPatternDemo {
   public static void main(String[] args) {
      List<Person> persons = new ArrayList<Person>();

      persons.add(new Person("Robert","Male", "Single"));
      persons.add(new Person("John","Male", "Married"));
      persons.add(new Person("Laura","Female", "Married"));
      persons.add(new Person("Diana","Female", "Single"));
      persons.add(new Person("Mike","Male", "Single"));
      persons.add(new Person("Bobby","Male", "Single"));

      Criteria male = new CriteriaMale();
      Criteria female = new CriteriaFemale();
      Criteria single = new CriteriaSingle();
      Criteria singleMale = new AndCriteria(single, male);
      Criteria singleOrFemale = new OrCriteria(single, female);

      System.out.println("Males: ");
      printPersons(male.meetCriteria(persons));

      System.out.println("\nFemales: ");
      printPersons(female.meetCriteria(persons));

      System.out.println("\nSingle Males: ");
      printPersons(singleMale.meetCriteria(persons));

      System.out.println("\nSingle Or Females: ");
      printPersons(singleOrFemale.meetCriteria(persons));
   }

   public static void printPersons(List<Person> persons){
      for (Person person : persons) {
         System.out.println("Person : [ Name : " + person.getName() 
            +", Gender : " + person.getGender() 
            +", Marital Status : " + person.getMaritalStatus()
            +" ]");
      }
   }      
}

5 단계

출력을 확인합니다.

남성 : 
사람 : [이름 : 로버트, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 존, 성별 : 남성, 결혼 여부 : 기혼]
사람 : [이름 : 마이크, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 바비, 성별 : 남성, 결혼 여부 : 미혼]

여성 : 
사람 : [이름 : 로라, 성별 : 여성, 결혼 여부 : 기혼]
사람 : [이름 : 다이애나, 성별 : 여성, 결혼 여부 : 미혼]

싱글 남성 : 
사람 : [이름 : 로버트, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 마이크, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 바비, 성별 : 남성, 결혼 여부 : 미혼]

단일 또는 여성 : 
사람 : [이름 : 로버트, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 다이애나, 성별 : 여성, 결혼 여부 : 미혼]
사람 : [이름 : 마이크, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 바비, 성별 : 남성, 결혼 여부 : 미혼]
사람 : [이름 : 로라, 성별 : 여성, 결혼 여부 : 기혼]