Latest web development tutorials
×

设计模式 หลักสูตร

รูปแบบการออกแบบ รู้เบื้องต้นเกี่ยวกับรูปแบบการออกแบบ โหมดโรงงาน แบบโรงงานย่อ รูปแบบเดี่ยว รุ่นสร้าง รุ่นต้นแบบ อะแดปเตอร์รุ่น สะพานโหมด รูปแบบตัวกรอง โหมดการทำงานร่วมกัน มัณฑนากร รูปแบบซุ้ม ฟลายเวท โหมดพร็อกซี่ ห่วงโซ่ของรูปแบบความรับผิดชอบ โหมดคำสั่ง รูปแบบล่าม โหมดซ้ำแล้วซ้ำอีก รูปแบบที่เป็นสื่อกลาง รูปแบบของที่ระลึก รูปแบบการสังเกตการณ์ รูปแบบของรัฐ null Object Model โหมดกลยุทธ์ โหมดแม่แบบ รูปแบบของผู้เข้าชม MVC โหมด โหมดตัวแทน โหมดนิติบุคคลองค์ประกอบ รูปแบบการเข้าถึงข้อมูลของวัตถุ รูปแบบการควบคุมด้านหน้า intercepting รูปแบบตัวกรอง รูปแบบการบริการผู้แทนจำหน่าย วัตถุ Transfer รุ่น

设计模式其他

ทรัพยากรโหมดออกแบบ

รูปแบบตัวกรอง

โหมดการกรอง (กรองแบบ) หรือโหมดมาตรฐาน (แบบเกณฑ์) เป็นรูปแบบการออกแบบที่ช่วยให้นักพัฒนาสามารถใช้เกณฑ์ที่แตกต่างในการกรองชุดของวัตถุที่ผ่านการดำเนินงานตรรกะที่จะแยกทางที่จะเชื่อมต่อพวกเขา ประเภทของรูปแบบการออกแบบของสคีโครงสร้างซึ่งรวมนี้เกณฑ์ได้รับมาตรฐานเดียว

การสำนึก

เราจะสร้างบุคคลวัตถุอินเตอร์เฟซเกณฑ์ระดับนิติบุคคลและการดำเนินงานของอินเตอร์เฟซในการกรองรายชื่อของวัตถุบุคคลCriteriaPatternDemoเรียนสาธิตของเราใช้เกณฑ์วัตถุตามเกณฑ์ต่างๆและชุดดังกล่าวเพื่อกรองรายชื่อของวัตถุบุคคล

รูปแบบตัวกรองแผนภาพ UML

ขั้นตอนที่ 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

ตรวจสอบการส่งออก

เพศชาย: 
บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: จอห์น, เพศ: ชาย, สถานะภาพ: สมรส]
บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด]

เพศหญิง: 
บุคคล: [ชื่อ: ลอร่า, เพศ: หญิง, สถานะภาพ: สมรส]
บุคคล: [ชื่อ: ไดอาน่า, เพศ: หญิง, สถานะภาพ: โสด]

ชายเดี่ยว: 
บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด]

เดียวหรือหญิง: 
บุคคล: [ชื่อ: โรเบิร์ต, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: ไดอาน่า, เพศ: หญิง, สถานะภาพ: โสด]
บุคคล: [ชื่อ: ไมค์, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: บ๊อบบี้, เพศ: ชาย, สถานะภาพ: โสด]
บุคคล: [ชื่อ: ลอร่า, เพศ: หญิง, สถานะภาพ: สมรส]