O que é Interface fluente e encadeamento de método

Olá pessoal!!
Achei alguns exemplos na internet, mas não conseguir entende como funcionar os métodos que retorna o this, e pode ser encadeado com outros método.
O que é Interface fluente e quando utilizar?
Como funcionar o encadeamento de método?

Encadeamento de método é chamar um método diretamente no resultado do outro, sem criar variáveis extra pra cada passo separado. Nao precisa retornar this necessariamente:

String nome = "Joao Da Silva";
String nomeNormalizado = nome.toLowerCase().replace(" ", "").trim();

Repare que a cada método uma nova variável string é criada (pois strings sao imutáveis), mas a gente só se importa com a última, após o trim().

Interfaces Fluentes geralmente sao desenhadas para facilitar a utilizacao delas pelo usuário. Elas geralmente usam encadeamento de método para, supostamente, facilitar a leitura. Um exemplo, setar propriedades de uma pessoa, sem e com interface fluente:

Pessoa joao = new Pessoa();
joao.setNome("Joao");
joao.setSobrenome("da Silva");
joao.setIdade(33);

//com interface fluente
Pessoa maria = new Pessoa().comNome("Maria").comSobrenome("dos Santos").comIdade(35);

Com interfaces fluentes você pode também guiar o usuário da sua api, retornando tipos que só permitam operaçoes válidas. Isso é mais dificil mas pode valer a pena dependendo do caso, por exemplo:

  Query query = Query.select("nome, sobrenome, idade").from("pessoas").where("idade > 20").construir();

Imagine que aqui, eu só posso chamar o método construir, se eu chamar o select() e o from().
E claro, eu só posso iniciar uma query, com um select.
Isso ajudaria alguém usando esse código a criar queries válidas.

2 curtidas