unity 飞机 残骸模型

Venkat Subramaniam在今天的演讲中提到了有关“级联方法”模式或“火车残骸”模式的内容,如下所示:

>someObject.method1().method2().method3().finalResult()

很少有人会将此与构建器模式相关联,但事实并非如此。 无论如何,让我们看一下Java中没有使用lambda表达式的示例:

public class TrainWreckPattern {public static void main(String[] args) {new Mailer().to("to@example.com").from("from@exmaple.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类,该类接受一系列值,即:to,from,subject和body,然后发送邮件。 很简单吧? 但是与此有关的一个问题是:一个Mailer对象一旦完成发送邮件,就不知道该如何处理。 可以重新使用它来发送另一封邮件吗? 还是应该知道电子邮件的发送状态? 这在上面的代码中是未知的,很多时候人们无法在文档中找到此信息。 如果我们可以将Mailer对象的范围限制在某个块内怎么办,以便一旦操作完成就无法使用它呢?

Java 8提供了一种使用Lambda表达式实现此目标的出色机制。 让我们看看如何做到这一点:

public class TrainWreckPatternLambda {public static void main(String[] args) {Mailer.send( mailer -> {mailer.to("to@example.com").from("from@exmaple.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(Consumer<Mailer> 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对象的代码的人来说,它的含义就更加清晰了。

让我知道在我分享的这个示例中是否还有其他可以改进的地方。

参考: Train Wreck Pattern –我们的JCG合作伙伴 Mohamed Sanaulla在Experiences Unlimited博客上使用Java 8进行了改进的实现 。

翻译自: https://www.javacodegeeks.com/2013/05/train-wreck-pattern-a-much-improved-implementation-in-java-8.html

unity 飞机 残骸模型

unity 飞机 残骸模型_训练残骸模式– Java 8中的改进实现相关推荐

  1. 训练残骸模式– Java 8中的改进实现

    Venkat Subramaniam在今天的演讲中提到了有关"级联方法"模式或"火车残骸"模式的内容,如下所示: >someObject.method1( ...

  2. oracle无效的关系运算符_每日一课 | Java 8中的instanceof运算符和访客模式替换

    我有一个梦想,不再需要操作员和垂头丧气的instanceof ,却没有访客模式的笨拙和冗长.所以我想出了以下DSL语法: Object msg = //... whenTypeOf(msg).     ...

  3. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

  4. 图像迁移风格保存模型_用TensorFlow.js在浏览器中部署可进行任意图像风格迁移的模型...

    风格迁移一直是很多读者感兴趣的内容之一,近日,网友ReiichiroNakano公开了自己的一个实现:用TensorFlow.js在浏览器中部署可进行任意图像风格迁移的模型.让我们一起去看看吧! Gi ...

  5. monostate 状态_为什么Borg模式比Python中的Singleton模式更好

    在python中,如果想要一个可以从任何地方访问的唯一"对象",只需创建一个Unique仅包含静态属性@staticmethods和@classmethods的类:您可以将其称为唯 ...

  6. unity支持的模型数据格式_Unity3D开发:向Unity3D中导入外部模型

    Unity3D支持多种外部导入的模型格式,但它并不是对每一种外部模型的属性都支持.具体的支持参数,您可以对照如下列表: 种类 网络 材质 动画 骨骼 Maya的.mb和.mal格式 √ √ √ √ 3 ...

  7. flyway数据迁移_使用Flyway在Java EE中进行数据库迁移

    flyway数据迁移 任何Java EE应用程序的数据库模式都会随着业务逻辑一起发展. 这使得数据库迁移对于任何Java EE应用程序都很重要. 您是否还在执行应用程序时手动执行它们? 它仍然是一个锁 ...

  8. java中如何改方法签名_我们可以在Java重写中更改方法签名吗?

    不,在覆盖超类的方法时,我们需要确保两个方法都具有相同的名称,相同的参数和相同的返回类型,否则它们将被视为不同的方法. 简而言之,如果我们更改签名,则尝试执行超类的方法时,将无法覆盖超类的方法. 原因 ...

  9. java继承的关键字_超级关键字在Java继承中的作用

    可以使用Java中的super关键字来引用父类对象.它通常在继承的上下文中使用.给出了一个用Java演示super关键字的程序,如下所示: 示例class A { int a; A(int x) { ...

最新文章

  1. 一分钟了解阿里云产品:高性能计算HPC
  2. oracle.com.cn宕机于09-11-13 20:21
  3. SDM450+android8.1播放左声道音频文件和右声道音频文件,左右喇叭都有声音问题
  4. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下
  5. Storm累计求和Demo并且在集群上运行
  6. 计算机网络规范的应用,计算机网络技术及其应用
  7. 推荐一个高质量的git命名查询和学习的github仓库git-recipes
  8. iOS:通过URL构件UIImage
  9. linux创建磁盘pv报错,Linux 磁盘管理
  10. Focal Loss 分类问题 pytorch实现代码(简单实现)
  11. php 抽象类和接口的区别
  12. 后缀自动机线性构造方法
  13. Python 批量重命名文件
  14. 离线环境安装dotnet framework nuget包
  15. Shell脚本定义变量和重新赋值
  16. 云桌面选不对,再好的产品也白用
  17. Django(十二):django支付(微信支付宝)+项目部署(虚拟机、docker、云服务器)
  18. 判断魔方阵c语言程序设计_魔方阵原理及十种解法(C语言)
  19. COJ 0580 4021征兵方案
  20. selenium+Java同时开启多个浏览器并行测试用例

热门文章

  1. Spring @Autowired 注释
  2. Oracle入门(七)之表空间
  3. Spring的IoC与DI差异
  4. 第五章循环结构(一)
  5. Servlet使用适配器模式进行增删改查案例(Dept.java)
  6. 单例模式懒汉式(线程安全写法)
  7. 2019蓝桥杯省赛---java---C---1(求和)
  8. Sring类型数组赋值
  9. mysql unique count_MySQL - Count Number of Unique Values
  10. super 和 this 关键字的比较+调用构造器(this)+动态绑定