Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这种图案叫什么名字,不受欢迎?_Java_Design Patterns - Fatal编程技术网

Java 这种图案叫什么名字,不受欢迎?

Java 这种图案叫什么名字,不受欢迎?,java,design-patterns,Java,Design Patterns,在Java中,我最近看到很多库中的类都有方法,这些方法总是返回类的实例,因此您可以调用多个方法,而不需要单独的代码行。例如: public class Resource{ public Resource path(String path) //execute some code return this; } 所以你可以这样做 new Resource.path("1").path("2").path("3") 而不是冗长的: 公共无效路径(字符串路径) 这个

在Java中,我最近看到很多库中的类都有方法,这些方法总是返回类的实例,因此您可以调用多个方法,而不需要单独的代码行。例如:

public class Resource{

  public Resource path(String path)
      //execute some code
      return this;
  }
所以你可以这样做

new Resource.path("1").path("2").path("3")
而不是冗长的:

公共无效路径(字符串路径)


这个模式有名字吗?它是好的还是坏的做法?

它被称为fluent接口模式

通常应用于生成器模式,也称为fluent builder

关于问题的第二部分:

优点:

  • 代码可读性和简洁性—它反映了代码的真实内容 是的,就像DSL一样
  • 缺点:

  • 调试问题
  • 测井问题
  • 上面链接中提到的命令查询分离被破坏
  • 更多信息:


    可能还有一些方面我没有涉及,尽管它用于方法链接。+1,如果你涉及OP问题的第二部分,那就好了。:)我称之为方法链接的示例,但不一定是流畅的接口。请注意您链接的Martin Fowler文章中的这句话:“我还注意到一个常见的误解——许多人似乎将流畅的界面等同于方法链接。当然链接是流畅界面使用的一种常见技术,但真正的流畅性远不止于此。”是的,您是对的,这两个术语绝对密切相关,对我来说,“超过那个”意味着除了返回“这个”,你还有更多的自然语言来描述,比如建筑过程,而不是新的A().setB().setC()
    Resource r = new Resource();
    r.path("1");
    r.path("2");
    r.path("3");