国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

設(shè)計模式筆記八:過濾器模式

2019-11-06 08:50:14
字體:
供稿:網(wǎng)友

原文:http://www.runoob.com/design-pattern/ 少許個人理解,如有錯誤請指出。歡迎一起討論。(本文基本摘抄)

定義: 過濾器模式(Filter Pattern)或標準模式(Criteria Pattern)是一種設(shè)計模式,這種模式允許開發(fā)人員使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合多個標準來獲得單一標準。(主要功能:過濾)

代碼實現(xiàn): 我們將創(chuàng)建一個 Person 對象、Criteria 接口和實現(xiàn)了該接口的實體類,來過濾 Person 對象的列表。CriteriaPatternDemo,我們的演示類使用 Criteria 對象,基于各種標準和它們的結(jié)合來過濾 Person 對象的列表。

過濾器模式的 UML 圖 這里寫圖片描述

步驟 1 創(chuàng)建一個類,在該類上應(yīng)用標準。 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)創(chuàng)建一個接口。 Criteria.java

import java.util.List;public interface Criteria { public List<Person> meetCriteria(List<Person> persons);}

步驟 3 創(chuàng)建實現(xiàn)了 Criteria 接口的實體類。 CriteriaMale.java

import java.util.ArrayList;import java.util.List;public class CriteriaMale implements Criteria { @Override public List<Person> meetCriteria(List<Person> persons) { List<Person> malePersons = new ArrayList<Person>(); 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 List<Person> meetCriteria(List<Person> persons) { List<Person> femalePersons = new ArrayList<Person>(); 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 List<Person> meetCriteria(List<Person> persons) { List<Person> singlePersons = new ArrayList<Person>(); 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 List<Person> meetCriteria(List<Person> persons) { List<Person> firstCriteriaPersons = 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 List<Person> meetCriteria(List<Person> persons) { List<Person> firstCriteriaItems = criteria.meetCriteria(persons); List<Person> otherCriteriaItems = otherCriteria.meetCriteria(persons); for (Person person : otherCriteriaItems) { if(!firstCriteriaItems.contains(person)){ firstCriteriaItems.add(person); } } return firstCriteriaItems; }}

步驟4 使用不同的標準(Criteria)和它們的結(jié)合來過濾 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() +" ]"); } } }

步驟 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 ]

and過濾邏輯:先拿標準一過濾,得到過濾一次后的person列表,再繼續(xù)進行第二次過濾。 or過濾邏輯:先用標準一過濾得到person列表1,再用標準二過濾得到person列表2,再講列表取并集,如果列表1中含有列表二沒有的item,add到列表二,列表二是最終的并集。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大姚县| 师宗县| 威海市| 舒兰市| 石城县| 邵武市| 策勒县| 洪湖市| 两当县| 乐陵市| 宁晋县| 宜宾县| 汨罗市| 库车县| 靖宇县| 徐汇区| 修武县| 茂名市| 海盐县| 南投县| 麻阳| 沁水县| 武强县| 定结县| 南汇区| 大渡口区| 西乌珠穆沁旗| 平安县| 囊谦县| 中牟县| 台前县| 广州市| 定西市| 康保县| 法库县| 巫山县| 冷水江市| 新宾| 宁蒗| 耿马| 崇州市|