Java設計模式-過濾器模式
導讀 | 過濾器模式(Filter Pattern)或標準模式(Criteria Pattern)是一種設計模式,這種模式允許開發人員使用不同的標準來過濾一組物件,透過邏輯運算以解耦的方式把它們連線起來。這種型別的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。 |
實現
我們將建立一個 Person 物件、Criteria 介面和實現了該介面的實體類,來過濾 Person 物件的列表。CriteriaPatternDemo,我們的演示類使用 Criteria 物件,基於各種標準和它們的結合來過濾 Person 物件的列表。
步驟 1
建立一個類,在該類上應用標準。
Person.java public class Person { private String name; private String gender; private String maritalStatus; public Person(String name,String gender,String maritalStatus){ this.name = name; this.gender = gender; this.maritalStatus = maritalStatus; } public String getName() { return name; } public String getGender() { return gender; } public String getMaritalStatus() { return maritalStatus; } }
步驟 2
為標準(Criteria)建立一個介面。
Criteria.java import java.util.List; public interface Criteria { public ListmeetCriteria(Listpersons); }
步驟 3
建立實現了 Criteria 介面的實體類。
CriteriaMale.java import java.util.ArrayList; import java.util.List; public class CriteriaMale implements Criteria { @Override public ListmeetCriteria(Listpersons) { ListmalePersons = new ArrayList(); for (Person person : persons) { if(person.getGender().equalsIgnoreCase("MALE")){ malePersons.add(person); } } return malePersons; } } CriteriaFemale.java import java.util.ArrayList; import java.util.List; public class CriteriaFemale implements Criteria { @Override public ListmeetCriteria(Listpersons) { ListfemalePersons = new ArrayList(); for (Person person : persons) { if(person.getGender().equalsIgnoreCase("FEMALE")){ femalePersons.add(person); } } return femalePersons; } } CriteriaSingle.java import java.util.ArrayList; import java.util.List; public class CriteriaSingle implements Criteria { @Override public ListmeetCriteria(Listpersons) { ListsinglePersons = new ArrayList(); for (Person person : persons) { if(person.getMaritalStatus().equalsIgnoreCase("SINGLE")){ singlePersons.add(person); } } return singlePersons; } } AndCriteria.java import java.util.List; public class AndCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public AndCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public ListmeetCriteria(Listpersons) { ListfirstCriteriaPersons = criteria.meetCriteria(persons); return otherCriteria.meetCriteria(firstCriteriaPersons); } } OrCriteria.java import java.util.List; public class OrCriteria implements Criteria { private Criteria criteria; private Criteria otherCriteria; public OrCriteria(Criteria criteria, Criteria otherCriteria) { this.criteria = criteria; this.otherCriteria = otherCriteria; } @Override public ListmeetCriteria(Listpersons) { ListfirstCriteriaItems = criteria.meetCriteria(persons); ListotherCriteriaItems = otherCriteria.meetCriteria(persons); for (Person person : otherCriteriaItems) { if(!firstCriteriaItems.contains(person)){ firstCriteriaItems.add(person); } } return firstCriteriaItems; } }
步驟4
使用不同的標準(Criteria)和它們的結合來過濾 Person 物件的列表。
CriteriaPatternDemo.java import java.util.ArrayList; import java.util.List; public class CriteriaPatternDemo { public static void main(String[] args) { Listpersons = new ArrayList(); 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(Listpersons){ for (Person person : persons) { System.out.println("Person : [ Name : " + person.getName() +", Gender : " + person.getGender() +", Marital Status : " + person.getMaritalStatus() +" ]"); } } }
步驟 5
執行程式,輸出結果:
Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : John, Gender : Male, Marital Status : Married ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Females: Person : [ Name : Laura, Gender : Female, Marital Status : Married ] Person : [ Name : Diana, Gender : Female, Marital Status : Single ] Single Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Single Or Females: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : Diana, Gender : Female, Marital Status : Single ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Person : [ Name : Laura, Gender : Female, Marital Status : Married ]
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2707597/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 極簡設計模式-過濾器模式設計模式過濾器
- Java進階篇設計模式之六 ----- 組合模式和過濾器模式Java設計模式過濾器
- 攔截過濾器模式過濾器模式
- java設計模式--裝飾器模式Java設計模式
- Java 設計模式(五)《裝飾器模式》Java設計模式
- java設計模式之裝飾器模式Java設計模式
- Java設計模式系列-裝飾器模式Java設計模式
- 極簡架構模式-攔截過濾器模式架構模式過濾器
- 【過濾器設計模式詳解】C/Java/JS/Go/Python/TS不同語言實現過濾器設計模式JavaJSGoPython
- Java學設計模式之裝飾器模式Java設計模式
- 16.java設計模式之迭代器模式Java設計模式
- Java設計模式——模板設計模式Java設計模式
- 基礎設計模式-03 從過濾器(Filter)校驗鏈學習職責鏈模式設計模式過濾器Filter
- Java設計模式——命令模式Java設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- 折騰Java設計模式之直譯器模式Java設計模式
- 20.java設計模式之直譯器模式Java設計模式
- 【Java】設計模式--建立型模式Java設計模式
- Java設計模式之builder模式Java設計模式UI
- Java 設計模式(工廠模式)Java設計模式
- Java 設計模式(四)《代理模式》Java設計模式
- Java設計模式-原型模式Java設計模式原型
- Java設計模式【單例模式】Java設計模式單例
- java設計模式-建造者模式Java設計模式
- Java設計模式---原型模式Java設計模式原型
- Java設計模式-橋接模式Java設計模式橋接
- Java設計模式之代理模式Java設計模式
- java設計模式 – 工廠模式Java設計模式
- 設計模式之----Java模板模式設計模式Java
- Java設計模式-策略模式分析Java設計模式
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式(工廠模式)Java設計模式
- Java設計模式-模板方法模式Java設計模式
- Java設計模式——單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java設計模式-工廠模式Java設計模式
- Java設計模式-單例模式Java設計模式單例