什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就过滤器模式简要概述。
什么是过滤器模式
过滤器模式就是对一组对象按照一定标准进行过滤以满足特定需求,其属于结构型设计模式。
应用场景
1、需要对数据进行特殊处理,处理逻辑与业务逻辑解耦的情况
小试牛刀
比如我们需要对人员进行过滤,同时不想与业务代码耦合。
我们先定义一个过滤接口DataFilter,并增加其实现类DataFilterByOne、DataFilterByTwo、DataFilterByThree内部增加过滤逻辑。消费者直接调用具体过滤类即可。
依赖关系:
1、创建用户实体
/**
* 系统用户
* @author senfel
* @version 1.0
* @date 2022/8/17 10:42
*/
@Data
public class Users {
/**
* 工作类型标识
*/
public static final String WORK_TYPE_ONE = "WORK_TYPE_ONE";
public static final String WORK_TYPE_TWO = "WORK_TYPE_TWO";
public static final String WORK_TYPE_THREE = "WORK_TYPE_THREE";
public Users(Integer id, String name, Integer age, String workType, String desc) {
this.id = id;
this.name = name;
this.age = age;
this.workType = workType;
this.desc = desc;
}
/**
* 主键ID
*/
private Integer id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 工作类型
*/
private String workType;
/**
* 备注
*/
private String desc;
@Override
public String toString() {
return "Users{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", workType='" + workType + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
2、创建用户过滤器接口及其实现类,实现类增加过滤逻辑
/**
* 数据过滤接口
* @author senfel
* @version 1.0
* @date 2022/8/17 10:45
*/
public interface DataFilter {
/**
* 数据处理
* @param users
* @return
*/
List<Users> actionData(List<Users> users);
}
/**
* 工作类型一实现类
* @author senfel
* @version 1.0
* @date 2022/8/17 10:47
*/
public class DataFilterByOne implements DataFilter{
@Override
public List<Users> actionData(List<Users> users) {
if(CollectionUtils.isEmpty(users)){
return new ArrayList<>();
}
return users.stream().filter(obj -> obj.getWorkType().equals(Users.WORK_TYPE_ONE)).collect(Collectors.toList());
}
}
/**
* 工作类型二实现类
* @author senfel
* @version 1.0
* @date 2022/8/17 10:47
*/
public class DataFilterByTwo implements DataFilter{
@Override
public List<Users> actionData(List<Users> users) {
if(CollectionUtils.isEmpty(users)){
return new ArrayList<>();
}
return users.stream().filter(obj -> obj.getWorkType().equals(Users.WORK_TYPE_TWO)).collect(Collectors.toList());
}
}
/**
* 工作类型三实现类
* @author senfel
* @version 1.0
* @date 2022/8/17 10:47
*/
public class DataFilterByThree implements DataFilter{
@Override
public List<Users> actionData(List<Users> users) {
if(CollectionUtils.isEmpty(users)){
return new ArrayList<>();
}
return users.stream().filter(obj -> obj.getWorkType().equals(Users.WORK_TYPE_THREE)).collect(Collectors.toList());
}
}
3、测试用例,直接用过滤类过滤具体业务数据
/**
* 过滤器模式测试
* @author senfel
* @version 1.0
* @date 2022/8/17 10:50
*/
@SpringBootTest
public class TestFilterPattern {
@Test
public void test(){
//创建测试集合并填入数据
List<Users> usersList = new ArrayList<>();
usersList.add(new Users(1,"senfel",25,Users.WORK_TYPE_ONE,null));
usersList.add(new Users(2,"yanli",28,Users.WORK_TYPE_TWO,null));
usersList.add(new Users(1,"changyang",30,Users.WORK_TYPE_ONE,null));
usersList.add(new Users(1,"jiaxue",10,Users.WORK_TYPE_THREE,null));
//类型一人员
System.err.println("类型一:"+new DataFilterByOne().actionData(usersList));
//类型二人员
System.err.println("类型二:"+new DataFilterByTwo().actionData(usersList));
//类型三人员
System.err.println("类型三:"+new DataFilterByThree().actionData(usersList));
}
}
测试结果:
类型一:[Users{id=1, name=‘senfel’, age=25, workType=‘WORK_TYPE_ONE’, desc=‘null’}, Users{id=1, name=‘changyang’, age=30, workType=‘WORK_TYPE_ONE’, desc=‘null’}]
类型二:[Users{id=2, name=‘yanli’, age=28, workType=‘WORK_TYPE_TWO’, desc=‘null’}]
类型三:[Users{id=1, name=‘jiaxue’, age=10, workType=‘WORK_TYPE_THREE’, desc=‘null’}]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154693.html