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