디자인 모드 의 필터 모드 상세 설명 (소스 코드 첨부)

7803 단어
필터 모드 (필터 패턴)
필터 모드 (Filter Pattern) 나 표준 모드 (Criteria Pattern) 는 개발 자 들 이 서로 다른 기준 으로 대상 을 걸 러 내 고 논리 적 연산 을 통 해 결합 을 푸 는 방식 으로 연결 할 수 있 도록 하 는 디자인 모델 이다.이런 유형의 디자인 모델 은 구조 형 모델 로 여러 가지 기준 을 결합 하여 단일 기준 을 얻는다.
이루어지다
Person 대상, Criteria 인터페이스 와 이 인 터 페 이 스 를 실현 하 는 실체 클래스 를 만들어 Person 대상 의 목록 을 걸 러 낼 것 입 니 다.Criteria PatternDemo, 우리 의 프 리 젠 테 이 션 류 는 Criteria 대상 을 사용 하여 각종 기준 과 그들의 결합 을 바탕 으로 Person 대상 의 목록 을 걸 러 냅 니 다.
단계 1:
  • 매 거 진 (PersonAttributes) 을 만 들 고 사람 (Person) 의 각종 속성 을 저장 합 니 다
  • 자바 문 자 는 유 니 코드 인 코딩 을 사용 합 니 다. 중국 어 를 사용 할 수 있 지만 사용 을 권장 하지 않 습 니 다.이곳 은 수출 편 의 를 위해 마음대로 한다.
    /**
     * @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.  ;
        }
    
    }
    
  • 클래스 (Person) 를 만 들 고 이 클래스 에 표준 을 적용 합 니 다.(즉 각종 여과)
  • /**
     * @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 소스 코드

    좋은 웹페이지 즐겨찾기