รูปแบบตัวกรอง
โหมดการกรอง (กรองแบบ) หรือโหมดมาตรฐาน (แบบเกณฑ์) เป็นรูปแบบการออกแบบที่ช่วยให้นักพัฒนาสามารถใช้เกณฑ์ที่แตกต่างในการกรองชุดของวัตถุที่ผ่านการดำเนินงานตรรกะที่จะแยกทางที่จะเชื่อมต่อพวกเขา ประเภทของรูปแบบการออกแบบของสคีโครงสร้างซึ่งรวมนี้เกณฑ์ได้รับมาตรฐานเดียว
การสำนึก
เราจะสร้างบุคคลวัตถุอินเตอร์เฟซเกณฑ์ระดับนิติบุคคลและการดำเนินงานของอินเตอร์เฟซในการกรองรายชื่อของวัตถุบุคคลCriteriaPatternDemoเรียนสาธิตของเราใช้เกณฑ์วัตถุตามเกณฑ์ต่างๆและชุดดังกล่าวเพื่อกรองรายชื่อของวัตถุบุคคล
ขั้นตอนที่ 1
สร้างชั้นในการประยุกต์ใช้มาตรฐานในระดับนี้
Person.java
บุคคลสาธารณะคุณภาพระดับ { ชื่อ String เอกชน เพศ String เอกชน String เอกชน maritalStatus; บุคคลสาธารณะ (ชื่อ String, String เพศ String maritalStatus) { ชื่อ this.name =; this.gender = เพศ this.maritalStatus = maritalStatus; } ประชาชน String getName () { กลับชื่อ; } String สาธารณะ getGender () { กลับเพศ } String สาธารณะ 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 ( "ชาย")) { malePersons.add (คน); } } กลับ malePersons; } }
CriteriaFemale.java
นำเข้า java.util.ArrayList; นำเข้า java.util.List; เรียนสาธารณะ CriteriaFemale ใช้เกณฑ์ { @Override รายการสาธารณะ <คน> meetCriteria (รายการ <คน> คน) { รายการ <คน> femalePersons ใหม่ = ArrayList <คน> (); สำหรับ (บุคคลคน: คน) { ถ้า (person.getGender (). equalsIgnoreCase ( "หญิง")) { femalePersons.add (คน); } } กลับ femalePersons; } }
CriteriaSingle.java
นำเข้า java.util.ArrayList; นำเข้า java.util.List; เรียนสาธารณะ CriteriaSingle ใช้เกณฑ์ { @Override รายการสาธารณะ <คน> meetCriteria (รายการ <คน> คน) { รายการ <คน> singlePersons ใหม่ = ArrayList <คน> (); สำหรับ (บุคคลคน: คน) { ถ้า (person.getMaritalStatus (). equalsIgnoreCase ( "เดี่ยว")) { 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
ตรวจสอบการส่งออก
เพศชาย: บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: จอห์น, เพศ: ชาย, สถานะภาพ: สมรส] บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด] เพศหญิง: บุคคล: [ชื่อ: ลอร่า, เพศ: หญิง, สถานะภาพ: สมรส] บุคคล: [ชื่อ: ไดอาน่า, เพศ: หญิง, สถานะภาพ: โสด] ชายเดี่ยว: บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด] เดียวหรือหญิง: บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: ไดอาน่า, เพศ: หญิง, สถานะภาพ: โสด] บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด] บุคคล: [ชื่อ: ลอร่า, เพศ: หญิง, สถานะภาพ: สมรส]