Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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