苏州网站建设方式,广州营销网站建设公司哪家好,网络营销推广技巧,wordpress淘宝客推广插件Venkat Subramaniam在今天的演讲中提到了有关“级联方法”模式或“火车残骸”模式的内容#xff0c;如下所示#xff1a; someObject.method1().method2().method3().finalResult()很少有人会将此与构建器模式相关联#xff0c;但事实并非如此。 无论如何#xff0c;让… Venkat Subramaniam在今天的演讲中提到了有关“级联方法”模式或“火车残骸”模式的内容如下所示 someObject.method1().method2().method3().finalResult() 很少有人会将此与构建器模式相关联但事实并非如此。 无论如何让我们看一下Java中没有使用lambda表达式的示例 public class TrainWreckPattern {public static void main(String[] args) {new Mailer().to(toexample.com).from(fromexmaple.com).subject(Some subject).body(Some content).send();}
}class Mailer{public Mailer to(String address){ System.out.println(To: address); return this;}public Mailer from(String address){ System.out.println(From: address); return this;}public Mailer subject(String sub){ System.out.println(Subject: sub); return this;}public Mailer body(String body){ System.out.println(Body: body); return this;}public void send(){ System.out.println(Sending ...); }
} 我以Venkat Subramaniam的讲话为例。 在上面的代码中我有一个Mailer类该类接受一系列值即tofromsubject和body然后发送邮件。 很简单吧 但是与此有关的一个问题是一个Mailer对象完成发送邮件后便不知道该如何处理。 可以重新使用它来发送另一封邮件吗 还是应该知道电子邮件的发送状态 这在上面的代码中是未知的很多时候人们无法在文档中找到此信息。 如果我们可以将Mailer对象的范围限制在某个块之内以便一旦操作完成就无法使用它该怎么办 Java 8提供了一种使用Lambda表达式实现此目标的出色机制。 让我们看看如何做到这一点 public class TrainWreckPatternLambda {public static void main(String[] args) {Mailer.send( mailer - {mailer.to(toexample.com).from(fromexmaple.com).subject(Some subject).body(Some content);});}}class Mailer{private Mailer(){}public Mailer to(String address){ System.out.println(To: address); return this;}public Mailer from(String address){ System.out.println(From: address); return this;}public Mailer subject(String sub){ System.out.println(Subject: sub); return this;}public Mailer body(String body){ System.out.println(Body: body); return this;}public static void send(ConsumerMailer mailerOperator){ Mailer mailer new Mailer();mailerOperator.accept(mailer);System.out.println(Sending ...); }
} 在上述实现中我通过将构造函数设为私有将Mailer类的实例化限制为send()方法。 然后send()方法现在接受Consumer接口的实现该接口是Single Abstract方法类可以用Lambda表达式表示。 在main()方法中我传递了一个lambda表达式该表达式接受Mailer实例然后在将其用于send()方法之前配置mailer对象。 lambda表达式的使用为Mailer对象的使用创建了明确的界限这样对于阅读有关如何使用Mailer对象的代码的人来说它的含义就更加清晰了。 让我知道在我分享的这个示例中是否还有其他可以改进的地方。 参考 训练残骸模式–我们的JCG合作伙伴 Mohamed Sanaulla在Experiences Unlimited博客上对Java 8的实现进行了改进 。 翻译自: https://www.javacodegeeks.com/2013/05/train-wreck-pattern-a-much-improved-implementation-in-java-8.html