text.skipToContent text.skipToNavigation
  1. Home
  2. Computer Science & IT
  3. Design Patterns in Ruby

Design Patterns in Ruby, 1st edition

  • Russ Olsen

Published by Addison-Wesley Professional (December 10th 2007) - Copyright © 2008

1st edition

Chosen format
View all
Design Patterns in Ruby

ISBN-13: 9780132799980

Includes: Instant Access

This product is not available in your country

What's included

  • Instant Access

    You'll get instant access to the digital content.


Praise for Design Patterns in Ruby

"Design Patterns in Ruby documents smart ways to resolve many problems that Ruby developers commonly encounter. Russ Olsen has done a great job of selecting classic patterns and augmenting these with newer patterns that have special relevance for Ruby. He clearly explains each idea, making a wealth of experience available to Ruby developers for their own daily work."

—Steve Metsker, Managing Consultant with Dominion Digital, Inc.

"This book provides a great demonstration of the key 'Gang of Four' design patterns without resorting to overly technical explanations. Written in a precise, yet almost informal style, this book covers enough ground that even those without prior exposure to design patterns will soon feel confident applying them using Ruby. Olsen has done a great job to make a book about a classically 'dry' subject into such an engaging and even occasionally humorous read."

—Peter Cooper

"This book renewed my interest in understanding patterns after a decade of good intentions. Russ picked the most useful patterns for Ruby and introduced them in a straightforward and logical manner, going beyond the GoF's patterns. This book has improved my use of Ruby, and encouraged me to blow off the dust covering the GoF book."

—Mike Stok

"Design Patterns in Ruby is a great way for programmers from statically typed objectoriented languages to learn how design patterns appear in a more dynamic, flexible language like Ruby."

—Rob Sanheim, Ruby Ninja, Relevance

Most design pattern books are based on C++ and Java. But Ruby is different—and the language's unique qualities make design patterns easier to implement and use. In this book, Russ Olsen demonstrates how to combine Ruby's power and elegance with patterns, and write more sophisticated, effective software with far fewer lines of code.

After reviewing the history, concepts, and goals of design patterns, Olsen offers a quick tour of the Ruby language—enough to allow any experienced software developer to immediately utilize patterns with Ruby. The book especially calls attention to Ruby features that simplify the use of patterns, including dynamic typing, code closures, and "mixins" for easier code reuse.

Fourteen of the classic "Gang of Four" patterns are considered from the Ruby point of view, explaining what problems each pattern solves, discussing whether traditional implementations make sense in the Ruby environment, and introducing Ruby-specific improvements. You'll discover opportunities to implement patterns in just one or two lines of code, instead of the endlessly repeated boilerplate that conventional languages often require.

Design Patterns in Ruby also identifies innovative new patterns that have emerged from the Ruby community. These include ways to create custom objects with metaprogramming, as well as the ambitious Rails-based "Convention Over Configuration" pattern, designed to help integrate entire applications and frameworks.

Engaging, practical, and accessible, Design Patterns in Ruby will help you build better software while making your Ruby programming experience more rewarding.

Table of contents

Foreword xvii

Preface xix

Acknowledgments xxv

About the Author xxvii

PART I: Patterns and Ruby 1

Chapter 1: Building Better Programs with Patterns 3

The Gang of Four 4

Patterns for Patterns 4

Separate Out the Things That Change from Those That Stay the Same 5

Program to an Interface, Not an Implementation 5

Prefer Composition over Inheritance 7

Delegate, Delegate, Delegate 12

You Ain't Gonna Need It 13

Fourteen Out of Twenty-Three 15

Patterns in Ruby? 17

Chapter 2: Getting Started with Ruby 19

Interactive Ruby 20

Saying Hello World 20

Variables 23

Fixnums and Bignums 24

Floats 26

There Are No Primitives Here 26

But Sometimes There Is No Object 27

Truth, Lies, and nil 28

Decisions, Decisions 30

Loops 32

More about Strings 34

Symbols 37

Arrays 38

Hashes 40

Regular Expressions 40

A Class of Your Own 41

Getting at the Instance Variables 43

An Object Asks: Who Am I? 46

Inheritance, Subclasses, and Superclasses 46

Argument Options 47

Modules 49

Exceptions 52

Threads 53

Managing Separate Source Files 54

Wrapping Up 55

PART II: Patterns in Ruby 57

Chapter 3: Varying the Algorithm with the Template Method 59

Keeping Up with What Life Throws at You 60

Separate the Things That Stay the Same 61

Discovering the Template Method Pattern 65

Hook Methods 66

But Where Are All the Declarations? 68

Types, Safety, and Flexibility 69

Unit Tests Are Not Optional 71

Using and Abusing the Template Method Pattern 73

Templates in the Wild 74

Wrapping Up 75

Chapter 4: Replacing the Algorithm with the Strategy 77

Delegate, Delegate, and Delegate Again 78

Sharing Data between the Context and the Strategy 80

Duck Typing Yet Again 82

Procs and Blocks 84

Quick-and-Dirty Strategies 88

Using and Abusing the Strategy Pattern 90

The Strategy Pattern in the Wild 90

Wrapping Up 92

Chapter 5: Keeping Up with the Times with the Observer 95

Staying Informed 95

A Better Way to Stay Informed 97

Factoring Out the Observable Support 100

Code Blocks as Observers 104

Variations on the Observer Pattern 105

Using and Abusing the Observer Pattern 106

Observers in the Wild 108

Wrapping Up 109

Chapter 6: Assembling the Whole from the Parts with the Composite 111

The Whole and the Parts 112

Creating Composites 114

Sprucing Up the Composite with Operators 118

An Array as a Composite? 119

An Inconvenient Difference 120

Pointers This Way and That 120

Using and Abusing the Composite Pattern 122

Composites in the Wild 123

Wrapping Up 125

Chapter 7: Reaching into a Collection with the Iterator 127

External Iterators 127

Internal Iterators 130

Internal Iterators versus External Iterators 131

The Inimitable Enumerable 133

Using and Abusing the Iterator Pattern 134

Iterators in the Wild 136

Wrapping Up 140

Chapter 8: Getting Things Done with Commands 143

An Explosion of Subclasses 144

An Easier Way 145

Code Blocks as Commands 147

Commands That Record 148

Being Undone by a Command 151

Queuing Up Commands 154

Using and Abusing the Command Pattern 154

The Command Pattern in the Wild 155

ActiveRecord Migrations 155

Madeleine 156

Wrapping Up 160

Chapter 9: Filling in the Gaps with the Adapter 163

Software Adapters 164

The Near Misses 167

An Adaptive Alternative? 168

Modifying a Single Instance 170

Adapt or Modify? 172

Using and Abusing the Adapter Pattern 173

Adapters in the

For teachers

All the material you need to teach your courses.

Discover teaching material