設計模式之過濾器模式

2021-08-10 02:38:36 字數 2960 閱讀 7418

有時候我們需要在一堆物件的集合裡找到我們需要的物件,這種情況如果比較簡單的過濾,我們可以簡單的用if-else去判斷,如果這種過濾是比較具有復用性質的過濾條件,例如在所有使用者裡篩選出成年人,還有就是在增加過濾條件的時候要去加if語句,不是特別的靈活,這個時候可以嘗試用過濾器模式去解決問題。

值得一提的是與過濾器模式比較像的類似於責任鏈模式,它是解決了請求和處理請求的物件之間的解耦,側重在於解耦,過濾器模式,側重在於過濾條件的復用和組合。

過濾器模式的uml圖如下:

我們來寫個關於使用者年齡和性別的過濾:

class user 

// setter getter

// tostring

}

然後是過濾器介面:

// 過濾器介面

inte***ce filter

兩種具體的過濾器:

// 篩選指定性別

class

genderfilter

implements

filter

public setfilter(setuserset)

setfiltuserset = new hashset(userset.size());

for (user user : userset)

}return filtuserset;

}}// 年齡段過濾

class

agefilter

implements

filter

public setfilter(setuserset)

setnewuserset = new hashset(userset.size());

for (user user : userset)

}return newuserset;}}

第一種方式是設定為抽象類,然後維護下乙個過濾器的引用,組成一種類似於鍊錶的結構,例如:

abstract class abstractfilter 

public

setfilterchain(set

userset)

}public abstract set

filter(set

userset);

}

然後具體的過濾器:

class

agefilter

extends

abstractfilter

public setfilter(setuserset)

}return filtuserset;

}}class

genderfilter

extends

abstractfilter

public setfilter(setuserset)

}return filtuserset;}}

然後測試**:

// 隨機生成100個人

random r = new random();

setuserset = new hashset(100);

for (int i = 0;i < 100;i ++)

abstractfilter abstractfilter = new agefilter2(new genderfilter2(null, "male"), 60);

setfilteruserset = abstractfilter.filter(userset);

system.out.println(filteruser);

這樣需要去構造過濾鏈,如果我們要復用過濾器的組合,我們可以用個類把組合條件封裝

第二種方式

class filters 

/*** 過濾

*/public

static setfilerchain(setuserset) else

}return filteruserset;}}

// 過濾器介面

inte***ce filter

// 篩選指定性別

class

genderfilter

implements

filter

public setfilter(setuserset)

setfiltuserset = new hashset(userset.size());

for (user user : userset)

}return filtuserset;

}}// 年齡段過濾

class

agefilter

implements

filter

public setfilter(setuserset)

setnewuserset = new hashset(userset.size());

for (user user : userset)

}return newuserset;}}

測試**:

abstractfilter abstractfilter = new agefilter2(new genderfilter2(null, "male"), 60);

setfilteruserset = abstractfilter.filter(userset);

system.out.println(filteruser);

過濾器模式就是解決了大堆物件的篩選。

設計模式之 過濾器模式

跳轉到 設計模式彙總 過濾器模式 1 從資料裡面找出想要的某些資料,邏輯相對簡單,也很常見,沒什麼好說的。2 這裡面唯一的一點東西是,得出的資料進行並 或運算.也沒啥,public abstract class vehicle public class car vehicle public clas...

設計模式之 過濾器模式

這種模式允許開發人員使用不同的標準來過濾一組物件,通過邏輯運算以解耦的方式把它們連線起來。這種型別的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。舉例 場景 中國移動有很多營銷活動,而參加這些營銷活動的物件是有要求的,有的需要判斷在網時長,有的需要有最低 要求等。實現 制定不同的規則來對一組...

java設計模式之過濾器模式

一 過濾器模式簡介 過濾器模式 filter pattern 或標準模式 criteria pattern 是一種設計模式,這種模式允許開發人員使用不同的標準來過濾一組物件,通過邏輯運算以解耦的方式把它們連線起來。這種型別的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。二 示例演示 1 業務...