有時候我們需要在一堆物件的集合裡找到我們需要的物件,這種情況如果比較簡單的過濾,我們可以簡單的用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 業務...