Template method pattern

9

Click here to load reader

Transcript of Template method pattern

Page 1: Template method pattern

Template Method Pattern

Usando

Eriko [email protected]

em Linguagem Dinâmica

Page 2: 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.

Page 3: Template method pattern

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

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

template method pattern

Page 6: 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

Page 7: 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

Page 8: Template method pattern

Uma referência rápida

Imagem retirada de http://python.pro.br/wiki/index.php?title=Design_patterns

Page 9: Template method pattern

Obrigado!Mais sobre a linguagem em:http://www.groovy-lang.org/