Лучшее руководство по шаблон фильтра в 2024 году. В этом руководстве вы можете изучить реализация,
Режим фильтра (Filter Pattern) или стандартный режим (Критерии Pattern) представляет собой модель разработки, которая позволяет разработчикам использовать различные критерии для фильтрации набор объектов, с помощью логических операций отцеплять способ подключения их. Этот тип шаблона проектирования структурной схемы, которая сочетает в себе несколько критериев получения единого стандарта.
Мы создадимобъект Person,интерфейс класса Критерии и сущность реализации интерфейса для фильтрации списка объектовPerson.CriteriaPatternDemo, наши демонстрационные классы использоватькритерииобъекты, основанные на различных критериях и их комбинациях , чтобы отфильтровать список объектовPerson.
Создайте класс, на применении стандартов в этом классе.
Person.java
Открытый класс Person { частное имя строки; частное Строка пол; частная Строка MaritalStatus; публичное лицо (имя String, String пол, String MaritalStatus) { this.name = имя; this.gender = пол; this.maritalStatus = MaritalStatus; } Строка GetName общественности () { вернуть имя; } Строка getGender общественности () { вернуться пол; } Строка getMaritalStatus общественности () { вернуть MaritalStatus; } }
Создание интерфейса для стандартных (критериев).
Criteria.java
импорт java.util.List; Критерии общественного интерфейса { открытый список <Person> meetCriteria (List <Person> человек); }
Создание классов сущностей реализованныекритерииинтерфейса.
CriteriaMale.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс CriteriaMale реализует критерии { @Override открытый список <Person> meetCriteria (List <Person> человек) { Список <Person> malePersons = новый ArrayList <Person> (); для (лицо человека: человек) { если (person.getGender (). equalsIgnoreCase ( "мужской")) { malePersons.add (человек); } } вернуть malePersons; } }
CriteriaFemale.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс CriteriaFemale реализует критерии { @Override открытый список <Person> meetCriteria (List <Person> человек) { Список <Person> femalePersons = новый ArrayList <Person> (); для (лицо человека: человек) { если (person.getGender (). equalsIgnoreCase ( "женский")) { femalePersons.add (человек); } } вернуть femalePersons; } }
CriteriaSingle.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс CriteriaSingle реализует критерии { @Override открытый список <Person> meetCriteria (List <Person> человек) { Список <Person> singlePersons = новый ArrayList <Person> (); для (лицо человека: человек) { если (person.getMaritalStatus (). equalsIgnoreCase ( "Single")) { singlePersons.add (человек); } } вернуть singlePersons; } }
AndCriteria.java
импорт java.util.List; Открытый класс AndCriteria реализует критерии { частные критерии критериев; частные критерии otherCriteria; общественного AndCriteria (критерии Критерии, критерии otherCriteria) { this.criteria = критерии; this.otherCriteria = otherCriteria; } @Override открытый список <Person> meetCriteria (List <Person> человек) { Список <Person> firstCriteriaPersons = criteria.meetCriteria (человек); вернуть otherCriteria.meetCriteria (firstCriteriaPersons); } }
OrCriteria.java
импорт java.util.List; Открытый класс OrCriteria реализует критерии { частные критерии критериев; частные критерии otherCriteria; общественные OrCriteria (критерии Критерии, критерии otherCriteria) { this.criteria = критерии; this.otherCriteria = otherCriteria; } @Override открытый список <Person> meetCriteria (List <Person> человек) { Список <Person> firstCriteriaItems = criteria.meetCriteria (человек); Список <Person> otherCriteriaItems = otherCriteria.meetCriteria (человек); для (лицо человека: otherCriteriaItems) { если (! firstCriteriaItems.contains (человек)) { firstCriteriaItems.add (человек); } } вернуть firstCriteriaItems; } }
Использование различных критериев (критериев) и их комбинации , чтобы отфильтровать список объектовPerson.
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() +" ]"); } } }
Проверьте выход.
Мужчины: Человек: [Имя: Роберт, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Джон, Пол: Мужской, Семейное положение: женат] Человек: [Имя: Mike, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Бобби, Пол: Мужской, Семейное положение: не замужем] Женщины: Человек: [Имя: Лора, Пол: Женский, Семейное положение: женат] Человек: [Имя: Diana, Пол: Женский, Семейное положение: не замужем] Одиночные Мужчины: Человек: [Имя: Роберт, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Mike, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Бобби, Пол: Мужской, Семейное положение: не замужем] Одинарной или Самки: Человек: [Имя: Роберт, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Diana, Пол: Женский, Семейное положение: не замужем] Человек: [Имя: Mike, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Бобби, Пол: Мужской, Семейное положение: не замужем] Человек: [Имя: Лора, Пол: Женский, Семейное положение: женат]