Template method pattern
Click here to load reader
-
Upload
eriko-morais -
Category
Software
-
view
52 -
download
0
Transcript of Template method pattern
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.
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
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
template method pattern
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
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
Uma referência rápida
Imagem retirada de http://python.pro.br/wiki/index.php?title=Design_patterns
Obrigado!Mais sobre a linguagem em:http://www.groovy-lang.org/