Latest web development tutorials

نمط الفلتر

وضع فلتر (مرشح نمط) أو الوضع العادي (معايير نمط) هو نموذج التصميم التي تسمح للمطورين لاستخدام معايير مختلفة لتصفية مجموعة من الأشياء، من خلال العمليات المنطقية لفصل سيلة للاتصال بهم. هذا النوع من نمط تصميم مخطط الهيكلي، والذي يجمع بين أكثر من معايير الحصول على معيار واحد.

تحقيق

سوف نقوم بإنشاءكائن شخص،واجهة الطبقة كيان معايير وتنفيذ واجهة لتصفية قائمة الكائناتشخص.CriteriaPatternDemo، والطبقات مظاهرة لدينا تستخدم الأجسامالمعايير،استنادا إلى معايير مختلفة ومجموعات منها لتصفية قائمة الكائناتشخص.

نمط تصفية UML الرسم البياني

خطوة 1

إنشاء فئة، على تطبيق المعايير في هذه الفئة.

Person.java

شخص الطبقة العامة {
	
   اسم سلسلة الخاص؛
   خاص سلسلة الجنسين؛
   سلسلة maritalStatus الخاص؛

   شخص العام (اسم سلسلة، سلسلة الجنسين، سلسلة maritalStatus) {
      this.name = الاسم؛
      this.gender = بين الجنسين؛
      this.maritalStatus = maritalStatus.		
   }

   جمهور سلسلة getName () {
      العودة الاسم؛
   }
   جمهور سلسلة getGender () {
      العودة بين الجنسين؛
   }
   جمهور سلسلة 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

تحقق من الانتاج.

الذكور: 
الشخص: [الاسم: روبرت، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: جون، الجنس: ذكر، الحالة الاجتماعية: متزوج]
الشخص: [الاسم: مايك، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: بوبي، الجنس: ذكر، الحالة الزواجية: أعزب]

الإناث: 
الشخص: [الاسم: لورا، الجنس: أنثى، الحالة الاجتماعية: متزوج]
الشخص: [الاسم: ديانا، الجنس: أنثى، الحالة الاجتماعية: أعزب]

الذكور واحدة: 
الشخص: [الاسم: روبرت، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: مايك، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: بوبي، الجنس: ذكر، الحالة الزواجية: أعزب]

أو الإناث واحدة: 
الشخص: [الاسم: روبرت، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: ديانا، الجنس: أنثى، الحالة الاجتماعية: أعزب]
الشخص: [الاسم: مايك، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: بوبي، الجنس: ذكر، الحالة الزواجية: أعزب]
الشخص: [الاسم: لورا، الجنس: أنثى، الحالة الاجتماعية: متزوج]