Design Patterns in Ruby

20
Design Patterns in Ruby Anil Wadghule Ruby hacker Sunday, 7 July 13

description

I gave talk on Design Patterns in Ruby at 'Pune Ruby Users Group' meeting on 6th July, 2013. Here are the code snippets https://gist.github.com/anildigital/5939892

Transcript of Design Patterns in Ruby

Page 1: Design Patterns in Ruby

Design Patterns in RubyAnil Wadghule Ruby hacker

Sunday, 7 July 13

Page 2: Design Patterns in Ruby

What are Design Patterns?

Sunday, 7 July 13

Page 3: Design Patterns in Ruby

What are Design Patterns?

Design Patterns are nothing but decent pre-loaded solutions to common problems

Sunday, 7 July 13

Page 4: Design Patterns in Ruby

What are Design Patterns?

They are worth knowing because they are solutions to common problems

Sunday, 7 July 13

Page 5: Design Patterns in Ruby

Are ‘Design Patterns’ restricted to certain programming languages?

NO! They are programming language independent.

They can be implemented in any programming languageMost OOP-specific design patterns may be irrelevant to functional languages

Sunday, 7 July 13

Page 6: Design Patterns in Ruby

Design Patterns book by Gang of Four

It made Design Patterns popular

Sunday, 7 July 13

Page 7: Design Patterns in Ruby

Design Patterns categories

Creational patterns (Singleton, Builder etc)

Structural patterns (Adapter, Composite, Proxy etc)

Behavioral patterns (Command, Strategy, Observer etc)

Architectural patterns (MVC - Model View Controller etc)

Concurrency patterns (Reactor, Thread pool etc)

Sunday, 7 July 13

Page 8: Design Patterns in Ruby

Design Patterns we will see are

Template Method

Strategy

Proxy

Composite

Adapter

Decorator

Sunday, 7 July 13

Page 9: Design Patterns in Ruby

Template MethodDocument

def renderrender_title(@title)render_footer(@author) ...

end

HTML DocumentText Document

def render_title(t)end

def render_author(a)end

def render_title(t)end

def render_author(a)end

Template Method

Sunday, 7 July 13

Page 10: Design Patterns in Ruby

Strategy

Document

def initialize(renderer) @renderer = rendererend

def render @renderer.render(self)end HTMLRenderer

TextRenderer

def render(doc) puts doc.title puts “By #{doc.author}”end

def render(doc) ...end

Sunday, 7 July 13

Page 11: Design Patterns in Ruby

Strategy

Separate out the change

Composition NOT inheritance

Sunday, 7 July 13

Page 12: Design Patterns in Ruby

Proxy

Document

def render(doc) puts doc.title puts “By #{doc.author}”end

ProxyDoc

def render if allowed?

@doc.render endend

client

Sunday, 7 July 13

Page 13: Design Patterns in Ruby

Adapter

Document

def renderend

Adapter

def print @doc.renderend

client

Sunday, 7 July 13

Page 14: Design Patterns in Ruby

CompositeDocument

def renderend

Composite

def render @subdocs.each do |s|

s.render endend

client

Document

def renderend

Document

def renderend

Sunday, 7 July 13

Page 15: Design Patterns in Ruby

Decorator

Document

def renderend

Decorator

def to_japanese translate(@doc.paragraphs)end

def render @doc.render + “do awesome”end

client

Sunday, 7 July 13

Page 16: Design Patterns in Ruby

Recommended Book

Sunday, 7 July 13

Page 17: Design Patterns in Ruby

References

http://en.wikipedia.org/wiki/Software_design_pattern

Sunday, 7 July 13

Page 18: Design Patterns in Ruby

Thanks!

Sunday, 7 July 13

Page 19: Design Patterns in Ruby

Questions?

Sunday, 7 July 13

Page 20: Design Patterns in Ruby

@anildigital on twitter

[email protected]

Sunday, 7 July 13