国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式詳解-過濾器模式(標(biāo)準(zhǔn)模式)

這篇具有很好參考價值的文章主要介紹了設(shè)計模式詳解-過濾器模式(標(biāo)準(zhǔn)模式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

導(dǎo)言

在軟件開發(fā)中,我們常常需要對大量的數(shù)據(jù)進(jìn)行篩選或過濾。例如,在一個電子商務(wù)網(wǎng)站中,我們可能需要根據(jù)用戶的喜好、價格區(qū)間、商品類型等條件來篩選出符合用戶需求的商品列表。為了實現(xiàn)這樣的功能,過濾器模式就派上了用場。

什么是過濾器模式?

過濾器模式是一種結(jié)構(gòu)型設(shè)計模式,它允許我們使用不同的條件從數(shù)據(jù)集合中篩選出滿足特定條件的數(shù)據(jù)子集。它將篩選條件和數(shù)據(jù)集合分離,使得二者可以獨(dú)立變化而互不影響。

過濾器模式的組成部分

過濾器接口(Filter):定義了過濾器的基本方法,在實際應(yīng)用中可以擴(kuò)展該接口以適應(yīng)不同的過濾條件。
具體過濾器(ConcreteFilter):實現(xiàn)過濾器接口,根據(jù)具體的條件對數(shù)據(jù)進(jìn)行過濾。
過濾器鏈(FilterChain):將多個過濾器按照一定的順序組合起來,形成一個過濾器鏈,依次對數(shù)據(jù)進(jìn)行過濾。

過濾器模式的應(yīng)用場景

過濾器模式在很多實際場景中都有應(yīng)用,例如:

  • 數(shù)據(jù)查詢:在數(shù)據(jù)庫查詢中,我們可以使用過濾器模式根據(jù)不同的條件對查詢結(jié)果進(jìn)行過濾,提高查詢效率。
  • 日志過濾:在日志系統(tǒng)中,我們可以使用過濾器模式根據(jù)級別、關(guān)鍵詞等條件對日志進(jìn)行過濾,方便問題排查與分析。
  • 圖像處理:在圖像處理中,我們可以使用過濾器模式根據(jù)不同的條件對圖像進(jìn)行濾波、增強(qiáng)等操作。

過濾器模式的實現(xiàn)

步驟 1
        創(chuàng)建一個類,在該類上應(yīng)用標(biāo)準(zhǔn)。

        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
        為標(biāo)準(zhǔn)(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
        使用不同的標(biāo)準(zhǔn)(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
        執(zhí)行程序,輸出結(jié)果:

        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 ]
        
這段代碼展示了一個使用標(biāo)準(zhǔn)模式(Criteria Pattern)的例子。標(biāo)準(zhǔn)模式用于按照特定的標(biāo)準(zhǔn)篩選對象。

步驟1中定義了一個名為Person的類,該類具有name、gender和maritalStatus屬性,并提供了相應(yīng)的構(gòu)造函數(shù)和訪問方法。

步驟2中定義了一個名為Criteria的接口,該接口包含一個meetCriteria方法,用于根據(jù)特定的標(biāo)準(zhǔn)篩選Person對象。

步驟3中定義了幾個實現(xiàn)了Criteria接口的類,分別用于篩選男性、女性和單身人士的Person對象。還定義了AndCriteriaOrCriteria類,用于組合不同的標(biāo)準(zhǔn)進(jìn)行篩選。

步驟4中使用不同的標(biāo)準(zhǔn)和它們的組合來過濾Person對象的列表。在示例中,創(chuàng)建了一個包含多個Person對象的列表,然后使用不同的標(biāo)準(zhǔn)對該列表進(jìn)行篩選,并打印出符合相應(yīng)標(biāo)準(zhǔn)的Person對象。

步驟5中執(zhí)行程序,根據(jù)不同的標(biāo)準(zhǔn)篩選并輸出結(jié)果??梢钥吹剑鶕?jù)不同的標(biāo)準(zhǔn)篩選后,輸出的Person對象列表符合對應(yīng)的要求。

標(biāo)準(zhǔn)模式可以很好地實現(xiàn)對象的篩選和過濾,提供了靈活性和可擴(kuò)展性,使得篩選邏輯與具體對象的實現(xiàn)解耦。這對于需要根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行篩選的應(yīng)用場景非常有用。

結(jié)語

過濾器模式是一種簡單而強(qiáng)大的軟件設(shè)計模式,它可以幫助我們靈活地篩選數(shù)據(jù),并將過濾條件與數(shù)據(jù)集合解耦。通過本篇博客的學(xué)習(xí),讀者可以了解到過濾器模式的基本概念、應(yīng)用場景和實現(xiàn)方式,并通過實例演示掌握其具體使用方法。希望本文對您深入理解過濾器模式有所幫助,并能在實際開發(fā)中靈活運(yùn)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-659317.html

到了這里,關(guān)于設(shè)計模式詳解-過濾器模式(標(biāo)準(zhǔn)模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 布隆過濾器詳解

    布隆過濾器詳解

    本文全部代碼地址 布隆過濾器是一種高效的數(shù)據(jù)結(jié)構(gòu),用于判斷一個元素是否存在于一個集合中.它的主要優(yōu)點是速度快,空間占用少,因此在需要快速判斷某個元素是否在集合中的場合得到廣泛引用. 布隆過濾器就是 一個大型的位數(shù)組和幾個不一樣的無偏hash函數(shù). 所謂無偏就是

    2023年04月22日
    瀏覽(32)
  • JavaWeb過濾器(Filter)詳解,是時候該把過濾器徹底搞懂了(萬字說明)

    JavaWeb過濾器(Filter)詳解,是時候該把過濾器徹底搞懂了(萬字說明)

    ? ? ? ? 注意:這篇文章很長,學(xué)習(xí)完后將會解決你對于過濾器(Filter)的所有疑惑,下面將通過理論和代碼的結(jié)合來進(jìn)行講解演示.....? ? 目錄 基本介紹 過濾器原理 過濾器(Filter)接口 使用過濾器(Filter) 創(chuàng)建過濾器(Fliter) 使用過濾器(Filter) 配置過濾器(Filter)攔截路徑? 注解方式

    2024年02月02日
    瀏覽(49)
  • Fiddler過濾器 Filters 詳解

    Fiddler過濾器 Filters 詳解

    目錄 前言: 一、 Hosts 過濾?(較常用) 二、Client Process 過濾(客戶端進(jìn)程過濾,通過配置只過濾/不過濾哪些進(jìn)程的請求。用的不多) 三、Request Headers?(根據(jù)請求頭信息進(jìn)行過濾。常用) 四、Breakpionts 設(shè)置斷點(很少用,畢竟可以通過 bpu、bpafter以及改寫規(guī)則js設(shè)置斷點)

    2024年02月12日
    瀏覽(28)
  • Java 過濾器 @WebFilter 詳解

    Java 過濾器 @WebFilter 詳解

    @WebFilter 注解是JavaEE中的一種注解,用于標(biāo)識一個類為過濾器(Filter)。過濾器用于對請求進(jìn)行過濾和處理,可以在請求到達(dá)目標(biāo)資源之前或之后執(zhí)行一些操作。 使用**@WebFilter**注解可以將一個類聲明為過濾器,并指定過濾器的名稱、URL模式、Servlet名稱等。 簡化配置 :不再需要

    2024年02月03日
    瀏覽(25)
  • 品味布隆過濾器的設(shè)計之美

    布隆過濾器是一個精巧而且經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。 你可能沒想到: RocketMQ、 Hbase 、Cassandra 、LevelDB 、RocksDB 這些知名項目中都有布隆過濾器的身影。 對于后端程序員來講,學(xué)習(xí)和理解布隆過濾器有很大的必要性。來吧,我們一起品味布隆過濾器的設(shè)計之美。 我們先來看一個商品

    2023年04月14日
    瀏覽(21)
  • gateway之過濾器(Filter)詳解

    gateway之過濾器(Filter)詳解

    在Spring Cloud中,過濾器(Filter)是一種關(guān)鍵的組件,用于在微服務(wù)架構(gòu)中處理和轉(zhuǎn)換傳入請求以及傳出響應(yīng)。過濾器位于服務(wù)網(wǎng)關(guān)或代理中,并通過攔截請求和響應(yīng)流量來提供各種功能。 過濾器在請求的不同生命周期階段執(zhí)行特定的操作,例如鑒權(quán)、認(rèn)證、請求轉(zhuǎn)發(fā)、限流、

    2024年02月05日
    瀏覽(20)
  • Spring Security內(nèi)置過濾器詳解

    Spring Security內(nèi)置過濾器詳解

    相關(guān)文章: OAuth2的定義和運(yùn)行流程 Spring Security OAuth實現(xiàn)Gitee快捷登錄 Spring Security OAuth實現(xiàn)GitHub快捷登錄 Spring Security的過濾器鏈機(jī)制 Spring Security OAuth Client配置加載源碼分析 根據(jù)前面的示例,我們已經(jīng)知道啟動時會加載18個過濾器,并且已經(jīng)知道了請求會匹配到DefaultSecurityF

    2024年02月05日
    瀏覽(26)
  • Spring Cloud Gateway 過濾器詳解

    Spring Cloud Gateway 過濾器詳解

    Spring Cloud Gateway根據(jù)作用范圍劃分為:GatewayFilter和GlobalFilter 由filter工作流程點,可以知道filter有著非常重要的作用,在“pre”類型的過濾器可以做參數(shù)校驗、權(quán)限校驗、流量監(jiān)控、日志輸出、協(xié)議轉(zhuǎn)換等,在“post”類型的過濾器中可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改,日志的輸

    2023年04月08日
    瀏覽(24)
  • Vue2中過濾器的用法詳解

    Vue2中過濾器的用法詳解

    目錄 一、過濾器的概念 二、過濾器的使用位置 三、過濾器的分類 1、全局過濾器 2、本地過濾器 四、過濾器應(yīng)用實例 1、使用過濾器實現(xiàn)省略號 2、使用過濾器處理時間戳 五、Vue3中已廢棄過濾器? 過濾器 是vue中的一個特性,作用是用于對文本進(jìn)行格式化的作用。分為全局過

    2024年02月07日
    瀏覽(16)
  • SpringBoot之過濾器Filter詳解及登錄校驗

    SpringBoot之過濾器Filter詳解及登錄校驗

    目錄 1 快速入門 2.Filter詳解 2.1 執(zhí)行流程 2.2 攔截路徑 2.3 過濾器鏈 3.登錄校驗-Filter 3.1 分析 3.2 具體流程 3.3 代碼實現(xiàn) 什么是Filter? Filter表示過濾器,是 JavaWeb三大組件(Servlet、Filter、Listener)之一。 過濾器可以把對資源的請求攔截下來,從而實現(xiàn)一些特殊的功能 使用了過濾器

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包