Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Objective-C Builder Pattern

DZone's Guide to

Objective-C Builder Pattern

· Java Zone
Free Resource

Just released, a free O’Reilly book on Reactive Microsystems: The Evolution of Microservices at Scale. Brought to you in partnership with Lightbend.

Well, here’s one of those too obvious to think of — too obvious for us until it was pointed out, anyways — clever programming tricks everyone should adopt: No doubt if you have any non-trivial data model, you’re using something recognizable as the Builder pattern to construct those objects. (And if you’re not, your code’s probably a complete mess, and you should be.) But there’s room for a good bit of error with variable scope, copy paste muck ups, and the like.

Enter this clever spark Klass Pieter, for whom obvious solution is obvious:

The Builder Pattern in Objective-C

… In order to make this pattern fit Objective-C we’re going to apply another pattern. This one comes from Ruby. I don’t know what the official name for it is, I just call it the Ruby configuration block pattern. This is our final idiomatic Objective-C implementation:

Pizza *pizza = [Pizza pizzaWithBlock:^(PizzaBuilder *builder]) {
   builder.size = 12;
   builder.pepperoni = YES;
   builder.mushrooms = YES;
}];

We made the interface fluent, the scope of the builder is limited to within the block and as an added benefit the call to build is now implicit. When the block returns the pizzaWithBlock: method knows that configuration is finished and can call build for us. Not only did we make the pattern idiomatic Objective-C, we also removed one of the Java implementation’s major headaches; forgetting to call the sentinel method…

As you may have noticed here and there, we’re big believers in making our code readable and foolproof. And this is a pretty nice advance on that front from our current builder pattern type of practices, yep.

And this Joris Kluivers fellow here was not only as struck with the elegance here as we are, he went ahead and started implementing it:

The Builder Pattern in Objective-C Foundation

In a recent blog post Klaas Pieter Annema wrote about using the builder pattern in Objective-C. Inspired by his post I created two categories that bring similar functionality to NSURL and NSDate.

An example:

NSURL *url = [NSURL URLWithBuilderBlock:^(NSURLComponents *builder) {
  builder.scheme = @"http”;
  builder.host = @"joris.kluivers.nl”;
  builder.path = @"/blog/2014/04/08/the-builder-pattern-in-objective-c/";
}];

My builder categories on NSDate and NSURL are available on github for review. Let me know what you think.

Nice examples there of how exactly to go about implementing this for your own objects.

h/t: ManiacDev!

Strategies and techniques for building scalable and resilient microservices to refactor a monolithic application step-by-step, a free O'Reilly book. Brought to you in partnership with Lightbend.

Topics:

Published at DZone with permission of Alex Curylo, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}