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.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
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%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

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, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs