Você está na página 1de 6

Robson Castilho

Boas prticas, orientao a objetos, agilidade, arquitetura de software, testes, ALM, carreira e todo o resto

Menu
Pular para o contedo Incio Sobre Mim Contatos Livros Indicados

Conhecendo !esign "atterns e o padro #trateg$


Publicado em 25/06/2011 por obson Castil!o "ala# $alera %est post &alarei um pouco sobre desi$n patterns# al$o 'ue e(iste !) d*cadas# muitas universidades i$noram e conse'uentemente poucos desenvolvedores sabem o 'ue s+o ou sabem utili,ar na pr)tica.u mesmo comecei a estudar sobre o assunto !) uns 2 anos e# aos poucos# &ui come/ando a entender e a aplicar al$uns dos padr0es mais con!ecidos1reve !ist2rico %o &inal dos anos 30# 4padr+o de pro5eto6 era um conceito da 7r'uitetura# descrito no livro 47 Pattern Lan$ua$e4# do &amoso ar'uiteto americano austraco C!ristop!er 7le(ander- 8) nos anos 90# :ent 1ec; e <ard Cunnin$!am come/aram a aplicar a ideia de padr0es na )rea de pro$rama/+oPor*m# somente em 1==5# os padr0es de pro5eto >ou desi$n patterns? $an!aram popularidade# 'uando .ric! @amma# ic!ard Aelm# alp! 8o!nson e 8o!n Blissides publicaram o livro 4Cesi$n Patterns D .lements o& eusable Eb5ectFEriented So&tGare4# catalo$ando 2H desi$n patterns- .sses I autores &icaram ent+o con!ecidos como @an$ o& "our >@o"?# 'ue tamb*m * um termo usado para se re&erir aos padr0es do livro >@o" Cesi$n Patterns?- >Juem souber de onde sur$iu o nome @an$ o& "our me aviseK? Es @o" Cesi$n Patterns s+o# atualmente# considerados a base para v)rios outros

padr0es e o livro acima se tornou um cl)ssico# sendo citado em inmeros arti$os# palestras e outros livrosCe&ini/+o Mas a&inal# o 'ue * um desi$n patternL Mm desi$n pattern descreve uma solu/+o $eral para um problema de desi$n 'ue ocorre com &re'uNncia na )rea de desenvolvimento de so&tGare- Sendo assim# desi$n pattern n+o * c2di$o pronto para reaproveitar em sua aplica/+o e sim um modelo para resolver um problema.(emplo >Padr+o Strate$O? 7inda perdidoL Bou tentar clarear mel!or com um e(emplo pr)tico do padr+o Strate$O- .ste padr+o# al*m de muito popular# * bem simples de ser entendidoE padr+o Strate$O serve para 4de&inir uma &amlia de al$oritmos# encapsular cada uma delas e torn)Flas intercambi)veis- Strate$O permite 'ue o al$oritmo varie independentemente dos clientes 'ue o utili,am6 >como de&inido no livro do @o"?.m outras palavras# Strate$O nos permite con&i$urar uma classe com um de v)rios comportamentos# utili,ando o conceito de EE c!amado de composi/+o7 estrutura deste padr+o pode ser visuali,ada pelo se$uinte dia$rama de classesP >&i$ura obtida de Co"actorO-com? Ima$ine 'ue# em uma aplica/+o de vendas# um Pedido possua duas &ormas di&erentes >estrat*$ias? de se calcular a ta(a de entre$a do mesmoP Padr+o e .(presso%este caso# o Pedido >Conte(t? seria con&i$urado por um cliente >classe 'ue o utili,a? com a estrat*$ia dese5ada- 7 implementa/+o da classe Pedido poderia ser al$o como >por simplicidade inclui apenas a estrat*$ia?P

1 2 3 public class Pedido 4 { 5 // utilizando composio: o pedido mant m uma !e"e!#ncia 6 $passada em seu const!uto!% 7 // pa!a a &t!ate'( )ase* no!malmente uma inte!"ace ou classe 8 a)st!ata 9 1 private +,alculado!-e.!ete /calculado!-e.!ete0 0 public Pedido$+,alculado!-e.!ete calculado!-e.!ete% 1 { 1 /calculado!-e.!ete 1 calculado!-e.!ete0 1 2 2 1 public decimal ,alcula!.!ete$% 3 { 1 // dele'ando o c3lculo do "!ete pa!a o o)4eto &t!ate'( 4 con"i'u!ado 1 return /calculado!-e.!ete5,alcula!.!etePa!a$this%0 5 2 1 2 6 1 7

7bai(o escrevemos a Strate$O base ICalculadorCe"reteP


public interface +,alculado!-e.!ete 1 { 2 decimal ,alcula!.!etePa!a$Pedido 3 pedido%0 4 2

Implementamos# ent+o# as estrat*$ias concretasP


1// "!ete 6Pad!o6 2public class ,alculado!-e.!etePad!ao : +,alculado!-e.!ete 3{ 4 public decimal ,alcula!.!etePa!a$Pedido pedido% 5 { 6 // a7ui 8ai o al'o!itmo de c3lculo de "!ete 76pad!o6 8 2 92 1 0// "!ete 69:p!esso6 1public class ,alculado!-e.!ete9:p!esso : 1+,alculado!-e.!ete 1{ 2 public decimal ,alcula!.!etePa!a$Pedido pedido% 1 { 3 // a7ui 8ai o al'o!itmo de c3lculo de "!ete 16e:p!esso6 4 2 12

5 1 6 1 7

Qemos# assim# toda a estrutura implementadaP o conte(to >Pedido?# a Strate$O base >ICalculadorCe"rete? e as Strate$ies concretas >CalculadorCe"retePadrao e CalculadorCe"rete.(presso?Cessa &orma# o cliente 'ue &or utili,ar o Pedido# poder) con&i$ur)Flo com o calculador dese5adoP
// al'uma classe 7ue utilize o Pedido 1 // pedido c!iado com o c3lculo de "!ete pad!o 2 8a! pedido1 1 new Pedido$new 3 ,alculado!-e.!etePad!ao$%%0 4 8a! "!etePad!ao 1 pedido15,alcula!.!ete$%0 5 6 // pedido c!iado com o c3lculo de "!ete e:p!esso 7 8a! pedido2 1 new Pedido$new 8 ,alculado!-e.!ete9:p!esso$%%0 9 8a! "!ete9:p!esso 1 pedido25,alcula!.!ete$%0 1 55555 0 55555

Simples n+o *L Com isso $an!amos em &le(ibidade# obedecendo al$uns princpios b)sicos da EEP 1- Pro$rame para abstra/0esP notem 'ue nosso Pedido n+o depende diretamente de nen!um calculador concreto e sim da inter&ace ICalculadorCe"rete2- EpenFclosed principleP nosso Pedido n+o ter) nen!um impacto caso o nmero de classes derivadas aumente >precisamos de um novo c)lculo de &rete? e nem se precisarmos alterar o al$oritmo de al$um calculadorBale lembrar 'ue cada padr+o pode ter varia/0es de uma solu/+o para outra- %o e(emplo dado# a estrat*$ia adotada * passada via construtor do Pedido# mas poderia ser diretamente no m*todo 'ue a utili,a ou ainda# Pedido poderia implementar um m*todo espec&ico para 4setar6 a estrat*$ia de c)lculoEutra situa/+oP o m*todo Calcular"retePara recebe o pr2prio conte(to >Pedido?# o 'ue * apenas uma alternativa- E Pedido poderia passar para o m*todo somente os campos necess)rios para o c)lculo do &reteE 'ue eu $an!o com elesL 7$ora 'ue vocN 5) sabe de onde vieram# o 'ue s+o e 5) viu um deles na pr)tica# vocN pode estar se per$untandoP o 'ue eu $an!o ao utili,ar desi$n patternsL Como eu sei em 'ue situa/+o aplicar determinado>s? padr+o>0es?L Bamos a al$umas vanta$ensP F Bocabul)rio comum entre desenvolvedoresP devs 'ue con!ecem padr0es podem conversar 4dando nome aos bois6# ou se5a# ao inv*s de e(plicar a solu/+o contando uma !ist2ria >muitas ve,es con&usa?# podeFse di,er 4utili,ei o padr+o R6-

F "acilitam na aplica/+o de t*cnicas e princpios de EE# como !eran/a# composi/+o# polimor&ismo e SELICF Mm padr+o pode ser utili,ado para re&atora/+o de um c2di$o ruim# altamente acoplado e de bai(a coes+oF Qodos esses tens colaboram para mel!or &acilidade de e(tens+o e manuten/+o do so&tGarePara saber 'uando aplic)Flos# vocN deve primeiramente con!ecNFlos e entendNFlos bem >cada desi$n pattern possui uma inten/+o e(plcita# e(plicando 'ual sua &inalidade D como a citada acima no padr+o Strate$O?- "eito isso# n+o se preocupe# a e(periNncia vai te $uiar e vocN vai naturalmente 4en(er$ar6 onde cabe determinado padr+oMas cuidadoK
4Con!ecNFlos bem6 e 4saber onde coloc)Flos6 n+o si$ni&ica 'ue eles C.B7M ser

aplicados por todo o so&tGare- Cesi$n Patterns * muito le$al# e por isso nos empol$amos em 'uerer utili,)Flos a 'ual'uer custo# o 'ue pode ser peri$osoK %+o se es'ue/a 'ue devemos sempre pensar simples >:ISS? e n+o sair acrescentando c2di$o 'ue n+o iremos precisar >pelo menos# em um primeiro momento? >S7@%I?Por onde come/arL InteressouL Su$iro come/ar pelo 2timo Aead "irstP Cesi$n Patterns# 'ue * um livro muito did)tico- Seus e(emplos est+o em 8ava# mas como se trata basicamente de conceitos de EE# * praticamente idNntico ao CT- >Se n+o me en$ano# no site da editora pode ser &eito o doGnload dos e(emplos em CT-?E livro do @o"# mencionado no incio# * um cl)ssico# mas sua leitura * mais complicada- Por se tratar de um livro mais anti$o# seus e(emplos est+o em CUU e !) v)rias cita/0es a aplicativos da'uela *poca e ao SmallQal; >incluindo al$uns c2di$os?- Portanto# n+o recomendo como primeira leituraMm site muito con!ecido sobre o assunto * o GGG-do&actorO-com# voltado para o -%et# 'ue possui e(emplos de c2di$o em CT para todos os 2H padr0es do @o"- Bale a pena con&erirK Conclus+o Cesi$n Patterns est+o por a !) muito tempo e merecem ser observados com carin!oSabendo utili,)Flos# podemos mel!orar muito o desi$n de nossas aplica/0esContudo# devemos ter cuidado para n+o utili,)Flos indiscriminadamente# complicando o 'ue poderia ser mais simples e saindo do verdadeiro &oco 'ue * entre$ar so&tGare.spero ter conse$uido pelo menos ati/ar a curiosidade de vocNs para estudarem sobre o assunto- Bale muito a penaK VWs e at* a pr2(imaK

Você também pode gostar