Mais conteúdo relacionado Design patterns in Ruby4. Th ird
& Me!
4
Wednesday, July 25, 12
5. (magma)
edward.og
5
Wednesday, July 25, 12
6. FORTRAN Pascal
BASIC
C
C++
Python Java
Ruby
Clojure
6
Wednesday, July 25, 12
10. Some
Common Solutions
10
Wednesday, July 25, 12
11. More
@#$&
Documents!
11
Wednesday, July 25, 12
12. Templates
&
Strategies
12
Wednesday, July 25, 12
13. Document
def render
render_title(@title)
render_author(@author)
...
end
PlainDocument HtmlDocument
def render_title(t) def render_title(t)
end end
def render_author(a) def render_author(a)
end end
Template Method 13
Wednesday, July 25, 12
14. PlainRender
def render(doc)
puts doc.title
Document puts “By #{doc.author}”
...
end
def render
@renderer.render(self)
end
HtmlRenderer
def render(doc)
...
end
Strategy 14
Wednesday, July 25, 12
15. Separate
Out
Change
15
Wednesday, July 25, 12
17. Composition
NOT
Inheritance
17
Wednesday, July 25, 12
19. Five
In
Five!
19
Wednesday, July 25, 12
20. Client
“Stand In” “Real Object”
Do something with @real Do real stuff
Stand In Meta Pattern 20
Wednesday, July 25, 12
21. What If
You
Need Control?
21
Wednesday, July 25, 12
22. Proxy!
22
Wednesday, July 25, 12
23. Client
ProxyDoc Document
def render def render(doc)
if allowed? puts doc.title
@doc.render puts “By #{doc.author}”
end ...
end end
Proxy 23
Wednesday, July 25, 12
24. What If
You
Need More?
24
Wednesday, July 25, 12
26. Client
Decorator Document
def to_japanese
translate(@doc.paragraphs)
end
def render
@doc.render
end
Decorator 26
Wednesday, July 25, 12
27. What If
You
Need Less?
27
Wednesday, July 25, 12
28. Facade!
28
Wednesday, July 25, 12
29. Client
EnterpriseDoc
Facade
10,000 Complex methods
def render
@ent_doc.complex_stuff()
end
Facade 29
Wednesday, July 25, 12
30. What If
You Need
Different?
30
Wednesday, July 25, 12
31. Adapt!
31
Wednesday, July 25, 12
32. Client
Adapter Document
def print def render
@doc.render ...
end end
Adapter 32
Wednesday, July 25, 12
33. What If
You Need
Little Bits?
33
Wednesday, July 25, 12
35. Document
Client
Document
CompositeDoc
def render
@subdocs.each do |s|
s.render
end
end Document
Composite 35
Wednesday, July 25, 12
36. Design Patterns are
nothing but decent
pre-loaded solutions to
common problems.
36
Wednesday, July 25, 12
37. They are worth your time
because of they are
solutions, but also
because they are decent.
37
Wednesday, July 25, 12