我读了很多关于设计模式的内容,但我仍然难以确定何时必须使用它们。今天我正在阅读有关lambdas的oracle文档,并看到了一个类“evolution”并说“嘿,显然这里有一些脱钩”。我认为这里有一个众所周知的模式,但不确切知道哪个是。
我还有一个问题是,如果我没有使用SPRING,那么关于接口和实现的文件夹结构非常清楚,这将是-ogcording goog practice-我必须创建接口的项目结构。
示例以此代码开头:
public static void printPersonsOlderThan(List<Person> roster, int age) {
for (Person p : roster) {
if (p.getAge() >= age) {
p.printPerson();
}
}
}
然后继续:
public static void printPersonsWithinAgeRange(
List<Person> roster, int low, int high) {
for (Person p : roster) {
if (low <= p.getAge() && p.getAge() < high) {
p.printPerson();
}
}
}
以此结束:
public static void printPersons(
List<Person> roster, CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
p.printPerson();
}
}
}
创建此界面:
interface CheckPerson {
boolean test(Person p);
}
这就是实施:
class CheckPersonEligibleForSelectiveService implements CheckPerson {
public boolean test(Person p) {
return p.gender == Person.Sex.MALE &&
p.getAge() >= 18 &&
p.getAge() <= 25;
}
}
答案 0 :(得分:4)
基本上你已经像Java FileFilter一样实现了filter,这接近visitor pattern:
Could someone in simple terms explain to me the visitor pattern's purpose with examples if possible
答案 1 :(得分:1)
我通过大学最高等级的设计模式科目,但我似乎无法找出任何熟悉的模式。
最有可能的是,没有使用预定义的模式,但CheckPerson
已被抽象,原因很明显。
在University,我们将包中的类分组,并且Interfaces通常放在具有实现类的同一个包中。
答案 2 :(得分:-1)
除访客外,您还可以考虑使用Strategy模式。
public abstract class PrintStrategy {
abstract protected List<Person> checkPerson(List<Person> list);
public void printPerson(List<Person> roster){
List<Person> filteredRoster = this.checkPerson(roster);
for (Person person : filteredRoster) {
person.print();
}
}
}
public class PrintOlderThanStartegy extends PrintStrategy {
private final int ageWaterMark;
public PrintOlderThanStartegy(final int ageWaterMark){
this.ageWaterMark = ageWaterMark;
}
protected List<Person> checkPerson(List<Person> roster) {
List<Person> filteredRoster = new ArrayList<Person>();
for (Person person : roster) {
if(person.getAge() > ageWaterMark){
filteredRoster.add(person);
}
}
return filteredRoster;
}
}
public class Test {
public static void main(String[] args) {
List<Person> roster = new ArrayList<Person>();
Person p1 = new Person();
p1.setAge(50);
Person p2 = new Person();
p2.setAge(20);
roster.add(p1);
roster.add(p2);
PrintStrategy printStrategy = new PrintOlderThanStartegy(30);
printStrategy.printPerson(roster);
}
}