Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

What are Design Patterns? Sunday, 7 July 13

Slide 3

Slide 3 text

What are Design Patterns? Design Patterns are nothing but decent pre-loaded solutions to common problems Sunday, 7 July 13

Slide 4

Slide 4 text

What are Design Patterns? They are worth knowing because they are solutions to common problems Sunday, 7 July 13

Slide 5

Slide 5 text

Are ‘Design Patterns’ restricted to certain programming languages? NO! They are programming language independent. They can be implemented in any programming language Most OOP-specific design patterns may be irrelevant to functional languages Sunday, 7 July 13

Slide 6

Slide 6 text

Design Patterns book by Gang of Four It made Design Patterns popular Sunday, 7 July 13

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Design Patterns we will see are Template Method Strategy Proxy Composite Adapter Decorator Sunday, 7 July 13

Slide 9

Slide 9 text

Template Method Document def render render_title(@title) render_footer(@author) ... end HTML Document Text 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

Slide 10

Slide 10 text

Strategy Document def initialize(renderer) @renderer = renderer end 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

Slide 11

Slide 11 text

Strategy Separate out the change Composition NOT inheritance Sunday, 7 July 13

Slide 12

Slide 12 text

Proxy Document def render(doc) puts doc.title puts “By #{doc.author}” end ProxyDoc def render if allowed? @doc.render end end client Sunday, 7 July 13

Slide 13

Slide 13 text

Adapter Document def render end Adapter def print @doc.render end client Sunday, 7 July 13

Slide 14

Slide 14 text

Composite Document def render end Composite def render @subdocs.each do |s| s.render end end client Document def render end Document def render end Sunday, 7 July 13

Slide 15

Slide 15 text

Decorator Document def render end Decorator def to_japanese translate(@doc.paragraphs) end def render @doc.render + “do awesome” end client Sunday, 7 July 13

Slide 16

Slide 16 text

Recommended Book Sunday, 7 July 13

Slide 17

Slide 17 text

References http://en.wikipedia.org/wiki/Software_design_pattern Sunday, 7 July 13

Slide 18

Slide 18 text

Thanks! Sunday, 7 July 13

Slide 19

Slide 19 text

Questions? Sunday, 7 July 13

Slide 20

Slide 20 text

@anildigital on twitter [email protected] Sunday, 7 July 13