Java 实现一般情况下的过滤器设计模式(即过滤器特定的字符串属性)
我正在实现这个设计模式的一个微小变化(过滤器) 我遇到的是,我需要过滤对象列表的字符串属性(比如“name”) 这里的问题是,我应该为存在的每个名称实现一个过滤器/标准类吗?我真的不这么认为。应该有更好、更模块化的方式来适应这一点: 请参阅,java中的接口要求其中的每个方法都由类实现。这意味着,如果我想创建一个NameCriteria类,我不能给它的方法Java 实现一般情况下的过滤器设计模式(即过滤器特定的字符串属性),java,oop,design-patterns,refactoring,Java,Oop,Design Patterns,Refactoring,我正在实现这个设计模式的一个微小变化(过滤器) 我遇到的是,我需要过滤对象列表的字符串属性(比如“name”) 这里的问题是,我应该为存在的每个名称实现一个过滤器/标准类吗?我真的不这么认为。应该有更好、更模块化的方式来适应这一点: 请参阅,java中的接口要求其中的每个方法都由类实现。这意味着,如果我想创建一个NameCriteria类,我不能给它的方法meetCriteria(列出人员)两个参数(比如要过滤的字符串) 是否有一种实用且较少硬编码的方法来实现此模式,因此我可以创建一个meetC
meetCriteria(列出人员)
两个参数(比如要过滤的字符串)
是否有一种实用且较少硬编码的方法来实现此模式,因此我可以创建一个
meetCriteria(列出人员、字符串名称)
方法,或者对此的任何解决方法?由于在Java 8中添加了流
API,因此设计模式已经过时。标准现在由谓词
接口定义,并由过滤器
方法执行
public static void main(String... args) {
Person john = new Person("John Doe", Gender.MALE, MaritalStatus.MARRIED);
Person jane = new Person("Jane Doe", Gender.FEMALE, MaritalStatus.MARRIED);
Person joe = new Person("Joe Bloe", Gender.MALE, MaritalStatus.SINGLE);
Set<Person> husbands = Stream.of(john, jane, joe)
.filter(person -> person.gender == Gender.MALE)
.filter(person -> person.maritalStatus == MaritalStatus.MARRIED)
.collect(Collectors.toSet());
}
enum Gender { MALE, FEMALE }
enum MaritalStatus { MARRIED, SINGLE }
static class Person {
final String name;
final Gender gender;
final MaritalStatus maritalStatus;
Person(String name, Gender gender, MaritalStatus maritalStatus){
this.name = name;
this.gender = gender;
this.maritalStatus = maritalStatus;
}
}
publicstaticvoidmain(字符串…参数){
Person john=新人(“john Doe”,性别,男性,已婚);
Person jane=新人(“jane Doe”,性别,女性,婚姻状况,已婚);
Person joe=新人(“joe Bloe”,性别。男性,婚姻状况。单身);
(约翰、简、乔)
.filter(person->person.gender==gender.MALE)
.filter(person->person.maritalStatus==maritalStatus.marred)
.collect(收集器.toSet());
}
枚举性别{男性,女性}
enum MaritalStatus{已婚,单身}
静态类人{
最后的字符串名;
最终性别;
最终海洋状态海洋状态;
Person(字符串名称、性别、MaritalStatus MaritalStatus){
this.name=名称;
这个。性别=性别;
this.maritalStatus=maritalStatus;
}
}
由于在Java8中添加了流
API,该设计模式已经过时。标准现在由谓词
接口定义,并由过滤器
方法执行
public static void main(String... args) {
Person john = new Person("John Doe", Gender.MALE, MaritalStatus.MARRIED);
Person jane = new Person("Jane Doe", Gender.FEMALE, MaritalStatus.MARRIED);
Person joe = new Person("Joe Bloe", Gender.MALE, MaritalStatus.SINGLE);
Set<Person> husbands = Stream.of(john, jane, joe)
.filter(person -> person.gender == Gender.MALE)
.filter(person -> person.maritalStatus == MaritalStatus.MARRIED)
.collect(Collectors.toSet());
}
enum Gender { MALE, FEMALE }
enum MaritalStatus { MARRIED, SINGLE }
static class Person {
final String name;
final Gender gender;
final MaritalStatus maritalStatus;
Person(String name, Gender gender, MaritalStatus maritalStatus){
this.name = name;
this.gender = gender;
this.maritalStatus = maritalStatus;
}
}
publicstaticvoidmain(字符串…参数){
Person john=新人(“john Doe”,性别,男性,已婚);
Person jane=新人(“jane Doe”,性别,女性,婚姻状况,已婚);
Person joe=新人(“joe Bloe”,性别。男性,婚姻状况。单身);
(约翰、简、乔)
.filter(person->person.gender==gender.MALE)
.filter(person->person.maritalStatus==maritalStatus.marred)
.collect(收集器.toSet());
}
枚举性别{男性,女性}
enum MaritalStatus{已婚,单身}
静态类人{
最后的字符串名;
最终性别;
最终海洋状态海洋状态;
Person(字符串名称、性别、MaritalStatus MaritalStatus){
this.name=名称;
这个。性别=性别;
this.maritalStatus=maritalStatus;
}
}
我目前正在为设计模式提供外部过滤功能,但感觉不自然。如果我没有更好的解决方案,我会在几天后在这里发布我的解决方案。我目前正在为设计模式制作一个外部过滤功能,但感觉很不自然。如果我没有更好的解决方案,我会在几天后在这里发布我的解决方案。