2014-01-07 80 views
2

在Java中,我最近看到很多類庫都帶有總是返回類實例的方法,因此您可以在不需要單獨的代碼行的情況下調用多個方法。例如:這種圖案的名稱是什麼,並皺眉?

public class Resource{ 

    public Resource path(String path) 
     //execute some code 
     return this; 
    } 

所以你可以做這樣的事情

new Resource.path("1").path("2").path("3") 

而非冗長:

public void path(String path)

Resource r = new Resource(); 
r.path("1"); 
r.path("2"); 
r.path("3"); 

有一個名稱,這個模式是它的好/壞做法?

+0

它用於方法鏈接.. – Manikandan

回答

10

它被稱爲流暢的界面模式。

經常應用於建設者模式又名流利的建設者。

http://www.martinfowler.com/bliki/FluentInterface.html

至於問題的第二部分:

優點:

  1. 代碼的可讀性和簡潔 - 它反映的是代碼真的 確實,像DSL

缺點:

  1. 與調試運行王氏記錄
  2. 問題的問題
  3. 中的鏈接上面提到的命令查詢分離得到打破

更多:http://en.wikipedia.org/wiki/Fluent_interface

的可能是一些方面我沒有」 t覆蓋雖然

+0

+1,如果你覆蓋OP問題的第二部分將是很好的。 :) –

+5

我會稱這是一個方法鏈的例子,但不一定是流暢的接口。請注意Martin Fowler的文章引述:「我也注意到一個常見的誤解 - 許多人似乎將流暢的接口與Method Chaining等同起來。當然,鏈接是流暢接口的常用技術,但真正的流暢性更強比起那個來說。」 –

+2

是的,你說得對,這兩個術語絕對是密切相關的,對我來說,「不僅僅是這個」意思是除了返回「this」之外,你還有更多的自然語言描述,例如建築進動,而不是new A()。setB()。setC() – janek