過濾器模式

2021-10-02 22:57:56 字數 1946 閱讀 7393

網上對過濾器的解釋已經很多了,而且這個模式的概念理解起來不算很難,但是發現網上提供的demo**寫得不好,所以這裡就給大家介紹一下如何實現合理的過濾器模式。

這樣我們應該怎麼做呢?**需要解耦,就需要把比較函式提取出來。經過思考,我們可以讓過濾器類持有乙個委託,這個委託就是用來過濾資料的,我們在建構函式中給過濾委託進行賦值即可。

復用過濾器的思想已經說清楚了,所以這裡我們就直接嘗試構建**,先定義出抽象類,考慮一下過濾器基本的抽象函式和需要的例項有那些,具體**如圖下:

using system;

using system.collections.generic;

using system.text;

namespace filterpattern

public abstract listtofilter(listdataset, t1 condition);}}

接下來需要繼承這個抽象類,去具體實現這個過濾器類,具體**如下:

using system;

using system.collections;

using system.collections.generic;

using system.text;

namespace filterpattern

public override listtofilter(listdataset, t1 condition) //單條件過濾

return tmp;

}public listtomergefilter(listfilterset, listdataset, t1 condition) //組合過濾

return tmp;}}

}

以上就把復用過濾器模式搞定了,自我感覺不錯,**也比較少。主要有兩個功能(單個條件過濾和組合條件過濾),但是還需要試一下到底會不會出現問題,首先我們需要模擬出一些資料再嘗試進行過濾,具體**如下:

listpersons = new list();

persons.add(new person("robert", 19, "single"));

persons.add(new person("john", 20, "married"));

persons.add(new person("laura", 51, "married"));

persons.add(new person("diana", 16, "single"));

persons.add(new person("mike", 30, "single"));

persons.add(new person("bobby", 9, "single"));

//過濾器初始化

filte***ctory filter = new filte***ctory(delegate(object data, object condition)

);listtmp = filter.tofilter(persons,18);

發現執行返回的列表,確實都是大於18歲的,唯一可惜的就是過濾函式用到了裝箱和拆箱,效能上面有一定的消耗,至於如何組合條件過濾,我們把例項物件放到過濾器列表裡,然後呼叫tomergefilter介面即可。

1.以上過濾器的注意事項

1)以上的過濾器的實現沒有考慮演算法上面的優化,資料龐大時可能頂不住。

2)雖然把過濾函式提取出來,**實現了解耦可復用,但是裝箱和拆箱會有一定的消耗。

2.過濾器的使用場景

1)資料庫的實現原理。

2)遊戲中模糊查詢其他玩家資訊。

過濾器模式

簡介 這種模式允許開發人員使用不同的標準來過濾一組物件,通過邏輯運算以解耦的方式把它們連線起來。這種型別的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。在本例中,以水果作為過濾的物件。水果的顏色和口味各有差別。有時我們只需要酸味的水果,有時只需要黃色的水果,這種情況下,就需要用到過濾器模式,...

過濾器模式

過濾器模式 用於過濾篩選 1.定義常規類 2.定義抽象介面類,用於過濾的函式接收list,並返回list 3.定義具體過濾類實現抽象介面,重寫過濾用的函式 4.定義用於操作的具體過濾類實現抽象介面,add,or,not 5.客戶端使用抽象介面類,進行具體的過濾操作 1.定義常規類 class dog...

過濾器模式

定義 過濾器模式 intercepting filter pattern 又稱標準模式 criteria pattern 主要用於統一接收並過濾客戶端的請求,根據過濾器的選擇,將請求傳送給對應的目標處理程式。過濾器模式屬於物件結構型模式。要點主要角色 目標物件 target 處理請求,根據要求執行任...