Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design Patterns in Ruby

Design Patterns in Ruby

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

anildigital

July 06, 2013
Tweet

More Decks by anildigital

Other Decks in Programming

Transcript

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

    View Slide

  2. What are Design Patterns?
    Sunday, 7 July 13

    View Slide

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

    View Slide

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

    View Slide

  5. 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

    View Slide

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

    View Slide

  7. 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

    View Slide

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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

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

    View Slide

  12. 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

    View Slide

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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. Recommended Book
    Sunday, 7 July 13

    View Slide

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

    View Slide

  18. Thanks!
    Sunday, 7 July 13

    View Slide

  19. Questions?
    Sunday, 7 July 13

    View Slide

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

    View Slide