设计模式学习之过滤器模式
来源:互联网 发布:数据的重要性 编辑:程序博客网 时间:2024/05/21 11:23
什么是过滤器模式?
这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
过滤器模式的关键是什么?
过滤器模式比较容易,通过过滤器实现过滤,关键就是我们的filter的逻辑,我们举一个简单的例子,如下图所示:
我们的computer包括有cpu,memory、disk等,然后我们通过AMDCpuFilter过滤出所有使用AMD牌子CPU的computer。代码如下所示:
Computer类:
public class Computer { private String cup; private String disk; private String memory; public Computer(String cup, String disk, String memory) { this.cup = cup; this.disk = disk; this.memory = memory; } public String getCup() { return cup; } public void setCup(String cup) { this.cup = cup; } public String getDisk() { return disk; } public void setDisk(String disk) { this.disk = disk; } public String getMemory() { return memory; } public void setMemory(String memory) { this.memory = memory; } public void show() { System.out.println("computer cpu = " + cup + ", disk = " + disk + ", memory = " + memory); }}
Filter类:
public interface Filter { public List<Computer> execute(List<Computer> computerList);}AMDCpuFilter
public class AMDCpuFilter implements Filter { @Override public List<Computer> execute(List<Computer> computerList) { List<Computer> interList = Lists.newArrayList(); for (Computer computer:computerList) { if ("AMD".equals(computer.getCup())) { interList.add(computer); } } return interList; }}InterCpuFilter类:
public class InterCpuFilter implements Filter { @Override public List<Computer> execute(List<Computer> computerList) { List<Computer> interList = Lists.newArrayList(); for (Computer computer:computerList) { if ("INTER".equals(computer.getCup())) { interList.add(computer); } } return interList; }}SeagateDiskFilter类:
public class SeagateDiskFilter implements Filter { @Override public List<Computer> execute(List<Computer> computerList) { List<Computer> interList = Lists.newArrayList(); for (Computer computer:computerList) { if ("SEAGATE".equals(computer.getDisk())) { interList.add(computer); } } return interList; }}client代码:
public class FilterDemo { public static void main(String[] args) { List<Computer> computerList = Lists.newArrayList(); computerList.add(new Computer("INTER", "WG", "GEIL")); computerList.add(new Computer("INTER", "SEAGATE", "KINGSTON")); computerList.add(new Computer("AMD", "SEAGATE", "KINGSTON")); computerList.add(new Computer("AMD", "TOSHIBA", "HP")); AMDCpuFilter amdFilter = new AMDCpuFilter(); InterCpuFilter interFilter = new InterCpuFilter(); SeagateDiskFilter seagateFilter = new SeagateDiskFilter(); List<Computer> amdList = amdFilter.execute(computerList); List<Computer> interList = interFilter.execute(computerList); List<Computer> seagateList = seagateFilter.execute(computerList); System.out.println("AMD:"); print(amdList); System.out.println("INTER"); print(interList); System.out.println("SEAGATE:"); print(seagateList); } public static void print(List<Computer> computerList) { for (Computer computer:computerList) { computer.show(); } }}最终输出为:
AMD:computer cpu = AMD, disk = SEAGATE, memory = KINGSTONcomputer cpu = AMD, disk = TOSHIBA, memory = HPINTERcomputer cpu = INTER, disk = WG, memory = GEILcomputer cpu = INTER, disk = SEAGATE, memory = KINGSTONSEAGATE:computer cpu = INTER, disk = SEAGATE, memory = KINGSTONcomputer cpu = AMD, disk = SEAGATE, memory = KINGSTON
最终我们可以有一个过滤器聚合类进行多聚合器的管理,有FilterChain类:
public class FilterChain { private List<Filter> filterList = Lists.newArrayList(); public void add(Filter filter) { filterList.add(filter); } public List<Computer> execute(List<Computer> computerList) { List<Computer> resultList = computerList; for (Filter filter:filterList) { resultList = filter.execute(resultList); } return resultList; }}client类中代码为:
System.out.println("CHAIN:"); FilterChain chain = new FilterChain(); chain.add(new AMDCpuFilter()); chain.add(new SeagateDiskFilter()); List<Computer> chainList = chain.execute(computerList); print(chainList);最终结果为:
CHAIN: computer cpu = AMD, disk = SEAGATE, memory = KINGSTON
0 0
- 设计模式学习之过滤器模式
- 设计模式之过滤器模式
- 设计模式之过滤器模式
- 设计模式之过滤器模式
- 设计模式之过滤器模式的学习思考
- 设计模式学习笔记--过滤器模式
- 设计模式学习笔记--拦截过滤器模式
- java 设计模式之过滤器模式(Filter)
- java设计模式之过滤器模式
- 设计模式--过滤器模式
- 设计模式-过滤器模式
- 设计模式:Filter过滤器
- 【设计模式 - 7】之过滤器模式(Filter)
- 设计模式学习之Adapter模式
- 设计模式入门学习之工厂模式
- 设计模式学习之---Adapter(适配器)模式
- 设计模式学习之---Facade(外观)模式
- 设计模式学习笔记之工厂模式
- Linux 进程间通信之 消息队列
- windows判断窗口是否置顶、设置取消置顶、设置前景
- zabbix安装配置
- js中将字符串转换成json的三种方式
- QComboBox item文字重叠
- 设计模式学习之过滤器模式
- 【设计模式】解释器模式
- 哈希表-二级指针
- Struts+JQuery实现ajax并返回json数据
- 开公司(排列枚举、DFS)
- 设计模式-09 策略模式
- HTML,CSS,font-family:中文字体的英文名称
- 程序设计模式(一) 基础回顾
- 深入探讨MySQL索引底层实现