after create(), so don't return *this void create() { GlutApp::create(); } }; // Fluent usage int main(int argc, char **argv) { FluentGlutApp(argc, argv) .withDoubleBuffer().withRGBA().withAlpha().withDepth() .at(200, 200).across(500, 500) .named("My OpenGL/GLUT App") .create(); } Java An example of a fluent test expectation in the jMock testing framework is: mock.expects(once()).method("m").with( or(stringContains("hello"), stringContains("howdy")) ); The jOOQ library models SQL as a fluent API in Java: Author author = AUTHOR.as("author"); create.selectFrom(author) .where(exists(selectOne() .from(BOOK) .where(BOOK.STATUS.eq(BOOK_STATUS.SOLD_OUT)) .and(BOOK.AUTHOR_ID.eq(author.ID)))); The fluflu annotation processor enables the creation of a fluent API using Java annotations. The JaQue library enables Java 8 Lambdas to be represented as objects in the form of expression trees at runtime, making it possible to create type-safe fluent interfaces, i.e., instead of: Customer obj = ... obj.property("name").eq("John") One can write: method<Customer>(customer -> customer.getName() == "John") Also, the mock object testing library EasyMock makes extensive use of this style of interface to provide an expressive programming interface. Collection mockCollection = EasyMock.createMock(Collection.class); EasyMock .expect(mockCollection.remove(null)) .andThrow(new NullPointerException()) .atLeastOnce(); In the Java Swing API, the LayoutManager interface defines how Container objects can have controlled Component placement. One of the more powerful LayoutManager implementations is the GridBagLayout class which requires the use of the GridBagConstraints class to specify how layout control occurs. A typical example of the use of this class is something like the following. GridBagLayout gl = new GridBagLayout(); JPanel p = new JPanel(); p.setLayout( gl ); JLabel l = new JLabel("Name:"); JTextField nm = new JTextField(10); GridBagConstraints gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy = 0; gc.fill = GridBagConstraints.NONE; p.add( l, gc ); gc.gridx = 1; gc.fill = GridBagConstraints.HORIZONTAL; gc.weightx = 1; p.add( nm, gc ); This creates a lot of code and makes it difficult to see what exactly is happening here. The Packer class provides a fluent mechanism, so you would instead write: JPanel p = new JPanel(); Packer pk = new Packer( p ); JLabel l = new JLabel("Name:"); JTextField nm = new JTextField(10); pk.pack( l ).gridx(0).gridy(0); pk.pack( nm ).gridx(1).gridy(0).fillx(); There are many places where fluent APIs can simplify how software is written and help create an API language that helps users be much more productive and comfortable with the API because the return value of a method always provides a context for further actions in that context. JavaScript There are many examples of JavaScript libraries that use some variant of this: jQuery probably being the most well known. Typically, fluent builders are used to