Java设计模式--过滤器模式

更新时间:2023-06-30 14:17:25 阅读: 评论:0

Java设计模式--过滤器模式
1 Filter Pattern 过滤器模式
⽬的:使⽤不同的标准来过滤⼀组对象,通过逻辑运算以解耦的⽅式把它们连接起来;
实现:制定不同的规则来对⼀组对象进⾏过滤,然后对过滤结果进⾏分组。
1.结合多个标准来获得单⼀标准。
2 实现
代码场景:中国移动有很多营销活动,⽽这些营销活动的对象是有要求的,有的需要判断在⽹时长,有的需要有最低套餐要求等;
1.中国移动客户是⽬标⾓⾊;
2.它不同营销活动的要求是过滤器⾓⾊;
2.1 代码实现
抽象过滤器⾓⾊:Filter
public interface Filter {
public List<Consumer>filtrate(List<Consumer> consumers);
}
具体过滤器⾓⾊:赠送移动宽带过滤器
public class BroadbandFilter implements Filter {
@Override
public List<Consumer>filtrate(List<Consumer> consumers){
List<Consumer> cs =new ArrayList<Consumer>();
// ⼿机套餐为138以上赠送移动宽带100M⼀年
for(Consumer c : consumers){
Combos()>=138){
cs.add(c);
倒霉的一天
}
}
return cs;
}
}
具体过滤器⾓⾊:赠送流量过滤器
public class FreeFlowFilter implements Filter {
东林大佛在哪里@Override
public List<Consumer>filtrate(List<Consumer> consumers){
List<Consumer> cs =new ArrayList<Consumer>();
/
/ 在⽹年份⼤于5年赠送10G移动流量
for(Consumer c : consumers){
ExistsYears()>=5){
cs.add(c);
}
}
return cs;
}
}
具体过滤器⾓⾊:⽣⽇提醒过滤器
public class BirthdayRemindFilter implements Filter {
@Override
public List<Consumer>filtrate(List<Consumer> consumers){
豆沙汤圆List<Consumer> cs =new ArrayList<Consumer>();
// 星级为5星级以上赠送⽣⽇提醒
for(Consumer c : consumers){
Combos()>=138){
cs.add(c);
}
}
return cs;
}
}
2.2 涉及⾓⾊
过滤器模式包含如下两个⾓⾊:
(1) AbstractFilter(抽象过滤器⾓⾊):在客户端可以调⽤它的⽅法,在抽象过滤器⾓⾊中可以知道相关的(⼀个或者多个)⼦系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的实现类去,传递给相应的实现类对象处理。
(2) ConcreteFilter(具体滤器⾓⾊):在客户端可以调⽤它的⽅法,在具体滤器⾓⾊会对⽬标对象集合进⾏逻辑过滤,最后再返回⼀个过滤后的集合。
(3) Subject(被过滤⾓⾊):在软件系统中可以有⼀个或者多个⽬标⾓⾊,在具体过滤器中会对⽬标⾓⾊进⾏逻辑处理以查看是否是我想要的。
2.3 调⽤
调⽤者:
public class Client {
public static void main(String[] args){
Consumer zhangft =new Consumer("张奉天",1,5,138);
Consumer ruiBo =new Consumer("芮博",5,2,238);
霞水母Consumer zhongJj =new Consumer("仲军军",10,4,1);
List<Consumer> cs =new ArrayList<Consumer>();
cs.add(zhangft);
cs.add(ruiBo);
cs.add(zhongJj);
Filter broadbandFilter =new BroadbandFilter();
Filter freeFlowFilter =new FreeFlowFilter();
Filter birthdayRemindFilter =new BirthdayRemindFilter();
System.out.println("移动宽带免费⼀年⽤户:");
List<Consumer> broadband = broadbandFilter.filtrate(cs);
printList(broadband,"移动宽带");
System.out.println("免费赠送移动流量⽤户:");
List<Consumer> freeFlow = freeFlowFilter.filtrate(cs);
printList(freeFlow,"流量10G");
考研面试System.out.println("赠送⽣⽇提醒⽤户:");
List<Consumer> birthdayRemind = birthdayRemindFilter.filtrate(cs);
eap是什么
printList(birthdayRemind,"⽣⽇提醒功能");
}
private static void printList(List<Consumer> cs, String bussiness){
for(Consumer c : cs){
System.out.println("["+ c.getStar()+"]星级⽤户["+ c.getName()
+"],在⽹["+ c.getExistsYears()+"],当前套餐为["+ c.getCombos()
+"],免费赠送["+ bussiness +"]");
}
}
}
结果:
移动宽带免费⼀年⽤户:
[5]星级⽤户[张奉天],在⽹[1],当前套餐为[138],免费赠送[移动宽带]
[2]星级⽤户[芮博],在⽹[5],当前套餐为[238],免费赠送[移动宽带]
免费赠送移动流量⽤户:
[2]星级⽤户[芮博],在⽹[5],当前套餐为[238],免费赠送[流量10G]
[4]星级⽤户[仲军军],在⽹[10],当前套餐为[1],免费赠送[流量10G]普通话朗读
赠送⽣⽇提醒⽤户:
[5]星级⽤户[张奉天],在⽹[1],当前套餐为[138],免费赠送[⽣⽇提醒功能]
[2]星级⽤户[芮博],在⽹[5],当前套餐为[238],免费赠送[⽣⽇提醒功能]
Java设计模式汇总:
代码地址:
参考⽂献:
[ 1 ] 图解设计模式/(⽇)结城浩著;杨⽂轩译。–北京:⼈民邮电出版社,2017.1.
[ 2 ] 维基百科
数字手势
[ 3 ] 极客学院WIKI–.
[ 4 ] 菜鸟教程–.

本文发布于:2023-06-30 14:17:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070306.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:赠送   过滤   过滤器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图