Java 这是哪种设计模式?印刷工

Java 这是哪种设计模式?印刷工,java,oop,design-patterns,decoupling,Java,Oop,Design Patterns,Decoupling,我读了很多关于设计模式的书,但我仍然很难确定何时必须使用它们。今天我在阅读有关lambdas的oracle文档时,看到一个类“evolution”,并说“嘿,显然这里有一些解耦”。我认为这里有一个众所周知的模式,但不知道确切的模式是什么 关于这一点,我还有一个问题,如果我没有使用SPRING,其中关于接口和实现的文件夹结构非常清楚,根据goog的实践,这将是我必须创建接口的项目结构 该示例从以下代码开始: public static void printPersonsOlderThan(List

我读了很多关于设计模式的书,但我仍然很难确定何时必须使用它们。今天我在阅读有关lambdas的oracle文档时,看到一个类“evolution”,并说“嘿,显然这里有一些解耦”。我认为这里有一个众所周知的模式,但不知道确切的模式是什么

关于这一点,我还有一个问题,如果我没有使用SPRING,其中关于接口和实现的文件夹结构非常清楚,根据goog的实践,这将是我必须创建接口的项目结构

该示例从以下代码开始:

public static void printPersonsOlderThan(List<Person> roster, int age) {
    for (Person p : roster) {
        if (p.getAge() >= age) {
            p.printPerson();
        }
    }
}
这就是实施:

class CheckPersonEligibleForSelectiveService implements CheckPerson {
    public boolean test(Person p) {
        return p.gender == Person.Sex.MALE &&
            p.getAge() >= 18 &&
            p.getAge() <= 25;
    }
}
类CheckPersonEligibleForSelectiveService实现CheckPerson{
公共布尔测试(p人){
return p.gender==Person.Sex.MALE&&
p、 getAge()>=18&&

p、 getAge()基本上,您已经实现了一个类似Java文件过滤器的应用程序,这接近于:


基本上,您已经实现了一个类似于Java文件过滤器的过滤器,这接近于:


我以最高的成绩通过了大学的设计模式课程,但我似乎无法识别任何熟悉的模式

最有可能的是,没有使用预定义的模式,但是由于明显的原因,
CheckPerson
已经被抽象


在大学里,我们将类分组在包中,接口通常与实现类放在同一个包中。

我在大学里以最高的成绩通过了设计模式课程,但我似乎无法识别任何熟悉的模式

最有可能的是,没有使用预定义的模式,但是由于明显的原因,
CheckPerson
已经被抽象


在大学中,我们在包中分组类,并且接口通常与实现类放在同一个包中。

除了访问者之外,还可以考虑使用模式。
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);
    }

}
公共抽象类打印策略{
抽象受保护清单核对人(清单);
公众人士(名册){
List FilterDroster=此。检查人员(花名册);
用于(人员:过滤器脱水器){
person.print();
}
}
}
公共类PrintOlderThanStartegy扩展了PrintStrategy{
私人最终国际水印;
公共印刷商(最终国际水印){
this.ageWaterMark=ageWaterMark;
}
受保护名单核对人(名单名册){
List filteredRoster=new ArrayList();
用于(人员:名册){
if(person.getAge()>age水印){
过滤器回收器。添加(人);
}
}
回滤器;
}
}
公开课考试{
公共静态void main(字符串[]args){
列表花名册=新的ArrayList();
人员p1=新人员();
p1.设定值(50);
人员p2=新人员();
p2.设置(20);
增加(p1);
增加(p2);
PrintStrategy PrintStrategy=新的PrintOlderThanStartegy(30);
印刷策略。印刷人员(名册);
}
}

<代码> > P>除了访问者外,还可以考虑使用模式。

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);
    }

}
公共抽象类打印策略{
抽象受保护清单核对人(清单);
公众人士(名册){
List FilterDroster=此。检查人员(花名册);
用于(人员:过滤器脱水器){
person.print();
}
}
}
公共类PrintOlderThanStartegy扩展了PrintStrategy{
私人最终国际水印;
公共印刷商(最终国际水印){
this.ageWaterMark=ageWaterMark;
}
受保护名单核对人(名单名册){
List filteredRoster=new ArrayList();
用于(人员:名册){
if(person.getAge()>age水印){
过滤器回收器。添加(人);
}
}
回滤器;
}
}
公开课考试{
公共静态void main(字符串[]args){
列表花名册=新的ArrayList();
人员p1=新人员();
p1.设定值(50);
人员p2=新人员();
p2.设置(20);
增加(p1);
增加(p2);
PrintStrategy PrintStrategy=新的PrintOlderThanStartegy(30);
印刷策略。印刷人员(名册);
}
}

这里的问题到底是什么?你在这里看到设计模式了吗?如果是…哪一个?这里的问题到底是什么?你在这里看到设计模式了吗?如果是…哪一个?你不同意stacker关于访客模式的看法吗?我想他是对的。谢谢你的支持!我查看了访客模式示例,必须承认它看起来很好吉祥相似。你不同意斯塔克关于访客图案的看法吗?我认为他是对的。谢谢你的投票!我研究了访客图案示例,必须承认它看起来吉祥相似。
class CheckPersonEligibleForSelectiveService implements CheckPerson {
    public boolean test(Person p) {
        return p.gender == Person.Sex.MALE &&
            p.getAge() >= 18 &&
            p.getAge() <= 25;
    }
}
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);
    }

}