Java Language
Płynny interfejs
Szukaj…
Uwagi
Cele
Podstawowym celem płynnego interfejsu jest zwiększenie czytelności.
Podczas wykorzystywania do konstruowania obiektów wybory dostępne dla osoby wywołującej mogą być jasno określone i wymuszone poprzez kontrole czasu kompilacji. Na przykład rozważmy następujące drzewo opcji reprezentujących kroki wzdłuż ścieżki, aby zbudować złożony obiekt:
A -> B
-> C -> D -> Done
-> E -> Done
-> F -> Done.
-> G -> H -> I -> Done.
Konstruktor korzystający z płynnego interfejsu umożliwi dzwoniącemu łatwe sprawdzenie, jakie opcje są dostępne na każdym etapie. Na przykład A -> B jest możliwe, ale A -> C nie jest i spowodowałoby błąd czasu kompilacji.
Truth - Fluent Testing Framework
Z „Jak korzystać z prawdy” http://google.github.io/truth/
String string = "awesome";
assertThat(string).startsWith("awe");
assertWithMessage("Without me, it's just aweso").that(string).contains("me");
Iterable<Color> googleColors = googleLogo.getColors();
assertThat(googleColors)
.containsExactly(BLUE, RED, YELLOW, BLUE, GREEN, RED)
.inOrder();
Płynny styl programowania
W stylu płynnego programowania zwracamy this
z metod płynnych (ustawiających), które nie zwracałyby niczego w stylu płynnego programowania.
Umożliwia to łączenie różnych wywołań metod, dzięki czemu kod jest krótszy i łatwiejszy w obsłudze dla programistów.
Rozważ ten płynny kod:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
System.out.println(person.whoAreYou());
}
}
Ponieważ metody ustawiające niczego nie zwracają, potrzebujemy 4 instrukcji w metodzie main
, aby utworzyć wystąpienie Person
z pewnymi danymi i wydrukować je. Dzięki płynnemu stylowi ten kod można zmienić na:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public Person withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public String getLastName() {
return lastName;
}
public Person withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
System.out.println(new Person().withFirstName("John")
.withLastName("Doe").whoAreYou());
}
}
Chodzi o to, aby zawsze zwracać jakiś obiekt, aby umożliwić budowanie łańcucha wywołań metod i używać nazw metod odzwierciedlających naturalne mówienie. Ten płynny styl sprawia, że kod jest bardziej czytelny.