디자인 모드 의 필터 모드 상세 설명 (소스 코드 첨부)
필터 모드 (Filter Pattern) 나 표준 모드 (Criteria Pattern) 는 개발 자 들 이 서로 다른 기준 으로 대상 을 걸 러 내 고 논리 적 연산 을 통 해 결합 을 푸 는 방식 으로 연결 할 수 있 도록 하 는 디자인 모델 이다.이런 유형의 디자인 모델 은 구조 형 모델 로 여러 가지 기준 을 결합 하여 단일 기준 을 얻는다.
이루어지다
Person 대상, Criteria 인터페이스 와 이 인 터 페 이 스 를 실현 하 는 실체 클래스 를 만들어 Person 대상 의 목록 을 걸 러 낼 것 입 니 다.Criteria PatternDemo, 우리 의 프 리 젠 테 이 션 류 는 Criteria 대상 을 사용 하여 각종 기준 과 그들의 결합 을 바탕 으로 Person 대상 의 목록 을 걸 러 냅 니 다.
단계 1:
/**
* @see Person
* @author Thornhill
*
*/
public enum PersonAttributes {
, , , ;
private PersonAttributes() {
}
public static PersonAttributes getMale() {
return ;
}
public static PersonAttributes getFemale() {
return ;
}
public static PersonAttributes getProgrammer() {
return ;
}
public static PersonAttributes getDoctor() {
return PersonAttributes. ;
}
}
/**
* @see
* @author Thornhill
*
*/
public class Person {
private PersonAttributes gender;
private PersonAttributes career;
private String name;
public Person(String name, PersonAttributes gender, PersonAttributes career) {
this.name = name;
this.gender = gender;
this.career = career;
}
/**
* @see toString,
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(name + " " + gender + " " + career);
return sb.toString();
// return super.toString();
}
public PersonAttributes getGender() {
return gender;
}
public PersonAttributes getCareer() {
return career;
}
public String getName() {
return name;
}
}
단계 2:
표준 (Criteria) 을 위 한 인터페이스 (Criteria) 를 만 듭 니 다.
/**
* @see
* @author Thornhill
*
*/
public interface Criteria {
public List meetCriteria(List persons);
}
단계 3:
Criteria 인 터 페 이 스 를 실현 하 는 각종 필터 실체 클래스 를 만 듭 니 다.
/**
* @see
* @author Thornhill
*
*/
public class CriteriaDoctor implements Criteria {
@Override
public List meetCriteria(List persons) {
List list = new ArrayList();
for (Person person : persons) {
if (person.getCareer().equals(PersonAttributes. )) {
list.add(person);
}
}
return list;
}
}
/**
* @see
* @author Thornhill
*
*/
public class CriteriaProgrammer implements Criteria {
@Override
public List meetCriteria(List persons) {
List list = new ArrayList();
for (Person person : persons) {
if (person.getCareer().equals(PersonAttributes. )) {
list.add(person);
}
}
return list;
}
}
/**
* @see
* @author Thornhill
*
*/
public class CriteriaMale implements Criteria {
@Override
public List meetCriteria(List persons) {
List list = new ArrayList();
for (Person person : persons) {
if (person.getGender().equals(PersonAttributes. )) {
list.add(person);
}
}
return list;
}
}
/**
* @see
* @author Thornhill
*
*/
public class CriteriaFemale implements Criteria {
@Override
public List meetCriteria(List persons) {
List list = new ArrayList();
for (Person person : persons) {
if (person.getGender().equals(PersonAttributes. )) {
list.add(person);
}
}
return list;
}
}
/**
* @see
* @author Thornhill
*
*/
public class FilterAnd implements Criteria {
private List list = new ArrayList();
public FilterAnd(Criteria... criterias) {
for (Criteria criteria : criterias) {
list.add(criteria);
}
}
@Override
public List meetCriteria(List persons) {
List result = new ArrayList(persons);
for (Criteria criteria : list) {
result = criteria.meetCriteria(result);
}
return result;
}
}
, Set
/**
* @see
* @author Thornhill
*
*/
public class FilterOr implements Criteria {
private List list = new ArrayList();
public FilterOr(Criteria... criterias) {
for (Criteria criteria : criterias) {
list.add(criteria);
}
}
@Override
public List meetCriteria(List persons) {
Set result = new HashSet();
for (Criteria criteria : list) {
result.addAll(criteria.meetCriteria(persons));
}
return new ArrayList(result);
}
}
단계 4:
서로 다른 표준 (Criteria) 과 그들의 결합 을 사용 하여 Person 대상 의 목록 을 걸 러 냅 니 다.
public class CriteriaPatternDemo {
public static void main(String[] args) {
List persons = new ArrayList();
//
persons.add(new Person(" 1", PersonAttributes. , PersonAttributes. ));
persons.add(new Person(" 2", PersonAttributes. , PersonAttributes. ));
persons.add(new Person(" 3", PersonAttributes. , PersonAttributes. ));
persons.add(new Person(" 4", PersonAttributes. , PersonAttributes. ));
//
Criteria criteriaMale = new CriteriaMale();
Criteria criteriaFemale = new CriteriaFemale();
Criteria criteriaDoctor = new CriteriaDoctor();
Criteria criteriaProgrammer = new CriteriaProgrammer();
//
Criteria filterAnd = new FilterAnd(criteriaFemale,criteriaProgrammer);//
Criteria filterOr = new FilterOr(criteriaDoctor,criteriaMale);//
//
System.out.println(persons.toString());
System.out.println(criteriaMale.meetCriteria(persons));
System.out.println(criteriaFemale.meetCriteria(persons));
System.out.println(criteriaProgrammer.meetCriteria(persons));
System.out.println(criteriaDoctor.meetCriteria(persons));
System.out.println("------------ ------------");
System.out.println(filterAnd.meetCriteria(persons));
System.out.println(filterOr.meetCriteria(persons));
}
}
단계 5:
출력 을 검증 하 다.
[ 1 , 2 , 3 , 4 ]
[ 1 , 2 ]
[ 3 , 4 ]
[ 1 , 3 ]
[ 2 , 4 ]
------------ ------------
[ 3 ]
[ 2 , 1 , 4 ]
결어:
필터 모드 가 우수 하여 필터 조건 에서 자동 으로 그룹 을 구성 할 수 있 으 며, 지난번 결 과 는 다음 입력 에 사용 할 수 있 습 니 다.
GitHub 소스 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.