advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement

Tutorials : The Anatomy Of A Groovy Builder :

The Anatomy Of A Groovy Builder

by Jon Dickinson

Groovy is a fairly recent language for the JVM, possessing a strong focus on developer productivity and literate programming (making code easier to read). In particular, the Groovy feature that enables this focus is it's builder support.

What Is a Builder?

Imagine you have a complex object graph to construct as part of your program. Suppose, for example, you wanted to model elements of a user interface as widgets that could be rendered in many different ways. You would probably want a screen object that could contain a title, a navigation (or menu) widget, and a footer (or status bar), while the main content of the screen would be able to have panels, lists, and tables. Even at this high level of definition, you are looking at some fairly complex code to build up the widget object graph.

The builder design pattern is intended to make construction of complex object graphs simpler. It does this by allowing developers to construct an object graph consistently, while providing validation that the graph is complete and structured correctly. This means, to use the screen widget example, that a screen cannot be constructed without a title, menu, or status bar, while the main content should not contain a footer element.

Builders in Java

Your set of builders in Java for the above scenario, implemented using method chaining, might allow you to construct screens in the following manner:
        Navigation nav = new NavigationBuilder()
                .withItem( "Home", true, false )
                .withItem( "Admin", false, true )
                .withItem( "Logout", false, false )
                .build();

        Content content = new ContentBuilder()
                .withTable( new Table() )
                .build();

        Screen screen = new ScreenBuilder()
                .withTitle( "My Page" )
                .withNavigation( nav )
                .withContent( content )
                .withFooter(new Footer( "Our Footer text" ) )
                .build();
The code above is quite readable and is certainly a big improvement over a lot of setter method calls to construct your object graph. The other advantage is the build() method, which provides a natural place to validate the structure of the object graph. However, this approach can start to break down as the model gets more complicated. The sign of trouble is when you add navigation items on the NavigationBuilder. What exactly do all those boolean values mean? They happen to determine both whether the navigation item has focus and whether it is visible to the user, for example, non-administrative users will not want to see the "Admin" navigation item, but you wouldn't know to look at the code. The alternative is to create a builder for your navigation items. This allows you to replace the cryptic booleans with meaningful method calls that determine the state of the constructed object. Taking this approach, you will end up with the code shown in Listing 1.

You can see clearly that the "Home" navigation item has focus, while the "Admin" navigation item is hidden. Unfortunately, the lines of code have almost doubled.

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 34
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

IBM Brings Developers Into the Cloud
Apache at 10: You Can't Buy Us
Microsoft's CodePlex Foundation Moving Forward
Apple Claims 100,000 Apps, Google Analyzes Them
Nokia Latest to Play Opera Mobile 10 Browser
PayPal Opens Up Payment Platform to Devs
Ubuntu Linux 9.10 'Karmic Koala' Starts Its Climb
IBM Links Rational Developer Tools, Tivoli Apps
Libraries Give Vista Apps a Windows 7 Look
Ubuntu: The 'Default Alternative' to Windows?

Delivering Web-based Embedded Fonts in CSS 3
Adobe Helps PHP Developers Create Rich Internet Applications
Java Developers Finding a Home at Adobe Flex
Virtualization Delivers a Dynamic Infrastructure
Consuming XML Web Services in iPhone Applications
Build a More Agile Business with IBM
POJO-Based Solutions for LDAP Access: One Good, One Better
IBM Offers Enhanced Measurement and Management for Energy Usage
IBM Helps Transformation to an Information-Based Enterprise
Top Five Touch UI-Related Design Guidelines

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Reprints, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs