반응형
필터 패턴은 다른 기준을 사용하여 객체를 필터링합니다.
기준은 논리 연산을 통해 함께 연결될 수 있습니다.
필터 패턴은 구조적 패턴입니다.
예제
import java.util.List;import java.util.ArrayList;class Employee { private String name; private String gender; private String retireStatus; public Employee(String name, String gender, String r) { this.name = name; this.gender = gender; this.retireStatus = r; } public String getName() { return name; } public String getGender() { return gender; } public String getRetireStatus() { return retireStatus; } @Override public String toString() { return "Employee [name=" + name + ", gender=" + gender + ", retireStatus=" + retireStatus + "]"; }}interface Criteria { public List meetCriteria(List persons);}class CriteriaMale implements Criteria { @Override public List meetCriteria(List persons) { List malePersons = new ArrayList(); for (Employee person : persons) { if (person.getGender().equalsIgnoreCase("MALE")) { malePersons.add(person); } } return malePersons; }}class CriteriaFemale implements Criteria { @Override public List meetCriteria(List persons) { List femalePersons = new ArrayList(); for (Employee person : persons) { if (person.getGender().equalsIgnoreCase("FEMALE")) { femalePersons.add(person); } } return femalePersons; }}class CriteriaRetire implements Criteria { @Override public List meetCriteria(List persons) { List singlePersons = new ArrayList(); for (Employee person : persons) { if (person.getRetireStatus().equalsIgnoreCase("YES")) { singlePersons.add(person); } } return singlePersons; }}class AndCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public AndCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public List meetCriteria(List persons) { List firstCriteriaPersons = criteria.meetCriteria(persons); return otherCriteria.meetCriteria(firstCriteriaPersons); }}class OrCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public OrCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public List meetCriteria(List persons) { List firstCriteriaItems = criteria.meetCriteria(persons); List otherCriteriaItems = otherCriteria.meetCriteria(persons); for (Employee person : otherCriteriaItems) { if (!firstCriteriaItems.contains(person)) { firstCriteriaItems.add(person); } } return firstCriteriaItems; }}public class Main { public static void main(String[] args) { List persons = new ArrayList(); persons.add(new Employee("Tom", "Male", "YES")); persons.add(new Employee("Jack", "Male", "NO")); persons.add(new Employee("Jane", "Female", "NO")); persons.add(new Employee("Diana", "Female", "YES")); persons.add(new Employee("Mike", "Male", "NO")); persons.add(new Employee("Bob", "Male", "YES")); Criteria male = new CriteriaMale(); Criteria female = new CriteriaFemale(); Criteria retire = new CriteriaRetire(); Criteria retireMale = new AndCriteria(retire, male); Criteria retireOrFemale = new OrCriteria(retire, female); System.out.println("Males: "); printPersons(male.meetCriteria(persons)); System.out.println("Females: "); printPersons(female.meetCriteria(persons)); System.out.println("Retire Males: "); printPersons(retireMale.meetCriteria(persons)); System.out.println("Retire Or Females: "); printPersons(retireOrFemale.meetCriteria(persons)); } public static void printPersons(List persons) { for (Employee person : persons) { System.out.println(person); } }}
위의 코드는 다음 결과를 생성합니다.
Males:Employee [name=Tom, gender=Male, retireStatus=YES]Employee [name=Jack, gender=Male, retireStatus=NO]Employee [name=Mike, gender=Male, retireStatus=NO]Employee [name=Bob, gender=Male, retireStatus=YES]Females:Employee [name=Jane, gender=FeMale, retireStatus=NO]Employee [name=Diana, gender=FeMale, retireStatus=YES]Retire Males:Employee [name=Tom, gender=Male, retireStatus=YES]
반응형
'프로그래밍 > 자바 디자인 패턴' 카테고리의 다른 글
자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 어댑터 패턴 (0) | 2021.04.18 |
---|---|
자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 브릿지 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 복합 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 데코레이터 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 퍼사드 패턴 (0) | 2021.04.18 |