Template method pattern
Click here to load reader
-
Upload
eriko-morais -
Category
Software
-
view
52 -
download
0
Transcript of Template method pattern
![Page 2: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/2.jpg)
O que é o Groovy● Groovy é uma linguagem de programação orientada a objetos
desenvolvida para a plataforma Java como alternativa à linguagem de programação Java. Groovy possui características de Python, Ruby e Smalltalk.
● Groovy utiliza uma sintaxe similar à de Java, é compilada dinamicamente para bytecode Java, e integra-se transparentemente com outros códigos e bibliotecas Java.
![Page 3: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/3.jpg)
CaracterísticasGroovy possui algumas características não presentes no Java padrão:
● Tipagem estática e tipagem dinâmica● Sintaxe nativa para listas, arrays associativos, vetores,
e expressões regulares● Clausuras (Clojures)● Sobrecarga de operadores
![Page 4: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/4.jpg)
template method pattern“O Template Method define os passos de um algoritmo e permite que a implementação de um ou mais desses passos seja fornecida por subclasses.”
Eric Freeman & Elisabeth Freeman - Use a Cabeça! Padrões de Projeto - 2nd ed.- p. 213
![Page 5: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/5.jpg)
template method pattern
![Page 6: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/6.jpg)
Exemploabstract class Accumulator {
protected initial
abstract doAccumulate(total, v)
def accumulate(values) {
def total = initial
values.each { v -> total = doAccumulate(total,
v) }
total
}
}
class Sum extends Accumulator {
def Sum() { initial = 0 }
def doAccumulate(total, v) { total + v }
}
class Product extends Accumulator {
def Product() { initial = 1 }
def doAccumulate(total, v) {
total * v }
}
println new
Sum().accumulate([1,2,3,4])
println new
Product().accumulate([1,2,3,4])
http://groovy-lang.org/design-patterns.html#_template_method_pattern
![Page 7: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/7.jpg)
SimplificandoVocê pode ter o resultado similar injetando um método usando Closures.
Closure addAll = { total, item -> total += item }
def accumulated = [1, 2, 3, 4].inject(0, addAll)
println accumulated // => 10
Closure multAll = { total, item -> total *= item }
accumulated = [1, 2, 3, 4].inject(1, multAll)
println accumulated // => 24
Usando closures desta forma parece mais com o padrão de Strategy, mas se percebermos que o método de injeção built-in é a parte genérica do algoritmo para o nosso método de modelo, em seguida, os Closures tornam as peças personalizadas do padrão Template Method.
http://groovy-lang.org/design-patterns.html#_template_method_pattern
![Page 8: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/8.jpg)
Uma referência rápida
Imagem retirada de http://python.pro.br/wiki/index.php?title=Design_patterns
![Page 9: Template method pattern](https://reader037.fdocuments.net/reader037/viewer/2022100802/587bfe3a1a28ab7c668b6015/html5/thumbnails/9.jpg)
Obrigado!Mais sobre a linguagem em:http://www.groovy-lang.org/