Você está na página 1de 25

01/08/2016

ConheaosPadresdeProjeto

www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?
comp=957

Conhea os Padres de Pro


jeto
O objetivo deste texto apresentar os padres
de projeto propiciando projetar solues de
software com melhor qualidade e com o
menor custo.

Oobjetivodestetextoapresentarumtemaquenosltimosanos
temganhadoaatenodacomunidadedesoftware,queacadadia
cobradaparaprojetarsoluesdesoftwarecommelhorqualidadee
comomenorcusto.Umaformasemdvidaquecontribuiparaa
obtenonaqualidadeseprojetosdesoftwaresoospadresde
projetos,eminglsdesignpatterns.
Nodecorrerdotextoserapresentadaumadefiniodoque,eo
quecaracterizaumpadrodeprojeto,alm,clarodemostrarqueo
usoexageradopodelevarasituaoinversaaquesepropemos
padresdeprojeto.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

1/25

01/08/2016

ConheaosPadresdeProjeto

Introduo
Atualmentenoseconcebeumprocessodedesenvolvimentode
softwaresriosemautilizaodaorientaoaobjetos,poisesta
permiteagregarqualidadesimportantesaossistemasdesenvolvidos
sobseusparadigmas,comoaextensabilidadeeareusabilidade[1]
Massomenteporestarutilizandoa,nogarantiadeseobteressas
qualidades.Paracriarasmelhoressolues,precisoseguirum
processodetalhadoparaobterumaanlisedosrequisitos,funcionais
ounofuncionais,edesenvolverumprojetoqueossatisfaaeque
possibilitesubmetlosateste,paraconstatareventuaisfalhas,alm
domaissedesejaqueoprojetotenhaumaarquiteturaflexvelpara
acomodarfuturosproblemaserequisitossemanecessidadeda
realizaodoreprojeto.
Analisandoocotidianododesenvolvimentodesoftwarepossvel
identificarqueaprocuraporumasoluoaumproblemaespecfico
possuicaractersticasidnticas,senoigualaencontradaemum
projetoanteriormentedesenvolvido,masquedevidodeficinciado
processo,asoluoeoproblemanoforadocumentadoesvezes
topoucocompreendidoemsuatotalidadeimpossibilitandoo
reaproveitamentodasidiasesolues.Destaforma,problemas
idnticosqueserepetememoutroscontextosnosoreconhecidos
comotal,consumindotempoerecursosembuscadesoluesqueem
tese,jhaviamsidoencontradas.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

2/25

01/08/2016

ConheaosPadresdeProjeto

Umacoisaqueosprojetistasavanadossabemquenodevemfazer
resolvercadaproblemaapartirdeprincpioselementaresoudo
zero.Aoinvsdisso,elesreutilizamsoluesquefuncionaramno
passado,eosutilizamrepetidamenteemseusprojetos.como
resolverumproblemamatemticoatentoindito,oupelo,menos
desconhecidoaalgum.Primeiroutilizasetodososconhecimentose
princpiosmatemticosquesetemconhecimentoequevenhaaser
tilnasoluo,depoisdealgumastentativaseusodasteorias
matemticas,chegasesoluoeapartirdatemseumalgoritmo
(estrutura)montadoquepodeserutilizadopararesolvertantos
problemasexistiremequesejamidnticosaoresolvido,emesmoque
noseja,possvelreaproveitarasidiaseconclusesdoproblema
resolvido.porissoqueospadresdeprojetos,designpatterns,tem
chamadoaatenoedespertadoointeressedosprojetistasde
software,porproporcionarelementosqueconduzemao
reaproveitamentodesoluesparaprojetos,enoapenasa
reutilizaodecdigo.
Ospadresdeprojetostornammaisfcilreutilizarsoluese
arquiteturasbemsucedidasparaconstruirsoftwaresorientadosa
objetosdeformaflexvelefcildemanter.Ousodepadresde
projetopodereduziracomplexidadedoprocessodeprojetarsoftware.
Almdisso,osoftwareorientadoaobjetosbemprojetadopossibilita
aosprojetistasreutilizareempregarcomponentespreexistentesem
sistemasfuturos.
Emsoftware,ospadresdeprojetonosoclassesnemobjeto.Em
vezdisso,osprojetistasusamessespadresparaconstruirconjuntos
declasseseobjetos.Parautilizlosdemaneiraeficaz,osprojetistas
precisamsefamiliarizarcomospadresmaispopulareseeficazes
utilizadospelaengenhariadesoftwareeconheceroseucontextoe
escopo.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

3/25

01/08/2016

ConheaosPadresdeProjeto

Aidiadeprojetarsoluesapartirdealgojconhecidoe
documentado,nonovaetopoucoteveorigemnaindustriade
software,apesardelajdemonstraruminteressepelotema.Aidia
surgiuem1977quandoChristopherAlexanderpublicouumcatlogo
commaisde250padresparaaarquiteturacivil,quediscutiam
questescomunsdaarquitetura,descrevendoemdetalheoproblema
easjustificativasdesuasoluo.
ChristopherAlexanderdescobriuquediminuindoofoco,ouseja,
procurandoestruturasqueresolvamproblemassimilares,elepode
discernirsimilaridadesentreprojetosdealtaqualidade.Elechamou
essassimilaridadesdepadres[5].
Algumtempodepoiseleformalizaseumtododedescriodos
padres,defendendoqueseuusonolimitariaosarquitetoss
soluesprescritas,masgarantiriaapresenadeelementos
fundamentais,eapossibilidadedeaperfeioalaatravsdas
experinciasadquiridas.Essemtodochamouatenodacomunidade
desoftware,fazendoqueotemaganhassedestaquenasconferncias
sobreorientaoaobjetos.Em1995ErichGama,RichardHelm,Ralph
Johnson,JohnVlissides,conhecidoscomoosquatroamigos[Gangof
FourGoF],publicaramolivrosobreottulo:Designpatterns
elementsofreusableobjectorientedsoftware,AddisonWesley
Longman,queganhouumaversonalnguaportuguesasobreottulo
dePadresdeProjetoSoluesreutilizveisdesoftwareorientado
aobjetos.Bookman.Olivroumcatlogoquedescreve23padres
deprojetocadaumfornecendoumasoluoparaumproblemade
software,seucontexto,aplicaoesuaseventuaisconseqncias,
dividindoosem3categorias:padresdecriao,estruturais,ede
comportamento.

Denindo padres de projeto

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

4/25

01/08/2016

ConheaosPadresdeProjeto

Definiroqueumpadrodeprojetodemaneiraclaraeobjetiva,tem
sidooobjetivodacomunidadedesoftware,desdeadcadade80.O
primeiroaapresentarumadefiniodoqueseriaumpadro,foio
arquitetodeprofessorChristopherAlexandre,noseulivroATimes
WayofBuilding(OxfordUniversityPress,1979),que:Cadapadro
umaregradetrspartes,queexpressaumarelaoentreumcerto
contexto,umproblemaeumasoluo.Sendoassimparaentendera
necessidade,existncia,deumpadronecessrioestudarsuas
partes:oproblema,asoluoeocontextosobreoqualele
aplicvel.
Dessaforma,resumidamentepodeseentendercomopadrode
projeto,comoasoluorecorrenteparaumproblemaemum
contexto,mesmoqueemprojetosereasdistintas.Observequeos
termoschavesdessadefinioso:contexto,problemaesoluo,o
quetornaobrigatriocompreensoinequvocadecadaum.Um
contextodizrespeitoaoambiente,eascircunstnciasdentrodoqual
algoexiste.Oproblemaaquestoindefinida,algoqueprecisaser
investigadoesolucionado.Normalmente,estatreladoaocontexto
emqueocorre.Finalmente,asoluorefererespostadoproblema
queajudaasolucionalo.
Entretanto,setivermosumasoluoparaumproblemaemumcerto
contexto,elanonecessariamentepodeconstituirumpadro,pois
necessrioqueelatenhacomocaractersticaaregularidade,isto,
elaseconstituircomoumpadrosepuderserutilizada
repetidamente.
SegundoChristopherAlexander,cadapadrodescreveumproblema
nonossoambienteeoncleodasuasoluo,detalformaquevoc
possausarestasoluomaisdeummilhodevezes,semnuncafaze
lodamesmamaneira.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

5/25

01/08/2016

ConheaosPadresdeProjeto

Ogrupodosquatroamigosclassificouospadresdeprojetopordois
critrios.Oprimeirocritrioafinalidaderefleteoqueumpadro
faz.Ospadrespodemterfinalidadesdecriao,comportamentoe
estrutural.Ospadresdecriaodescrevemastcnicaspara
instanciarobjetos(ougruposdeobjetos),epossibilitamorganizar
classeseobjetosemestruturamaiores,osdecomportamentose
caracterizampelamaneirapelasquaisclassesouobjetosinterageme
distribuemresponsabilidadeseosestruturaislidamcomacomposio
declassesouobjetos.Osegundocritriooescopoespecificaseo
padroaplicadoclasseouobjeto.

Caractersticas de um padro de projeto


Emboraumpadrosejaadescriodeumproblema,deumasoluo
genricaesuajustificativa,issonosignificaquequalquersoluo
conhecidaparaumproblemapossaconstituirumpadro,poisexistem
caractersticasobrigatriasquedevemseratendidaspelospadres:
[3].
1.Devempossuirumnome,quedescrevaoproblema,assolues
econseqncias.Umnomepermitidefinirovocabulrioaser
utilizadopelosprojetistasedesenvolvedoresemumnvelmais
altodeabstrao.
2.Todopadrodeverelatardemaneiraclaraaqual
(is)problema(s)eledeveseraplicado,ouseja,quaissoos
problemasquequandoinseridoemumdeterminadocontextoo
padroconseguirresolvelo.Algunspodendoexigirpr
condies.
3.Soluodescreveoselementosquecompemoprojeto,seus
relacionamentos,responsabilidadesecolaboraes.Umpadro
deveserumasoluoconcreta,eledeveserexprimidoemforma
degabarito(algoritmo)que,noentantopodeseraplicadode
maneirasdiferentes.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

6/25

01/08/2016

ConheaosPadresdeProjeto

4.Todopadrodeverelatarquaissoassuasconseqnciaspara
quepossaseranalisadaasoluoalternativadeprojetosepara
acompreensodosbenefciosdaaplicaodoprojeto.
Nopodeserconsideradoumpadrodeprojetotrechodecdigos
especficos,mesmoqueparaoseucriadorelereflitaumpadro,que
solucionaumdeterminadoproblema,porqueospadresdevemestar
aumnvelmaiordeabstraoenolimitadoarecursosde
programao.Umpadrodeprojetonomeia,abstraieidentificaos
aspectoschavesdeumaestruturadeprojetocomumparatornalatil
paraacriaodeumprojetoorientadoaobjetosreutilizvel[3].

A importncia dos padresde projeto


Omaisimportantesobreospadresqueelessosolues
aprovadas.Cadacatlogoincluiapenaspadresqueforam
consideradosteispordiversosdesenvolvedoresemvriosprojetos.
Ospadrescatalogadostambmsobemdefinidososautores
descrevemcadapadrocommuitocuidadoeemseuprpriocontexto,
portantoserfcilaplicaropadroemsuasprpriascircunstncias.
Elestambmformamumvocabulriocomumentreos
desenvolvedores.

Quandoos padres no o ajudaro

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

7/25

01/08/2016

ConheaosPadresdeProjeto

Ospadressoummapa,noumaestratgica.Oscatlogos
geralmenteapresentaroalgumcdigofontecomoumaestratgica
deexemplo,portantoelesnodevemserconsideradoscomo
definitivos.Ospadresnoajudaroadeterminarqualaplicaovoc
deveestarescrevendoapenascomoimplementarmelhoraaplicao
assimqueoconjuntoderecursoseoutrasexignciasforem
determinados.Ospadresajudamcomoqueecomo,masnocom
porqueouquando.
Oconceitodeutilizarospadresdeformaindiscriminadaconhecida
comoantipadres(antipatterns).DeacordocomAndrewKoenig[3],
seumpadrorepresentaamelhorprtica,entoumantipadro
representaumalioaprendida.
Existemduasnoesdeantipadres:
1.Aquelesquedescrevemumasoluoruimparaumproblemaque
resultouemumasituaoruim
2.Aquelesquedescrevemcomoselivrardeumasituaoruime
comoprocederdessasituaoparaumasituaoboa.
Emsumaumantipadroconstituiaousoindevidodospadresde
projeto,ouoseuusoexagerado,oquepodeserconstatadopela
utilizaodepadresimprpriosparaumdeterminadocontexto,ou
usoinadequado.Autilizaodospadresproporcionaumaumentona
flexibilidadedosistema,entretantopodedeixalomaiscomplexoou
degradaraperformance.Algumasperdassotolerveis,mas
subestimarosefeitoscolateraisdaadoodospatterns,umerro
comum,principalmentedaquelesquetomamousocomoum
diferencialenopelarealnecessidade.

Como padres de projeto solucionam

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

8/25

01/08/2016

ConheaosPadresdeProjeto

problemas de projeto
Oalvoprincipaldousodospadresdeprojetonodesenvolvimentode
softwareodaorientaoaobjetos.Comoosobjetossoos
elementoschavesemprojetosOO,apartemaisdifcildoprojetoa
decomposiodeumsistemaemobjetos.Atarefadifcilporque
muitosfatoresentramemjogo:encapsulamento,granularidade,
dependncia,flexibilidade,desempenho,evoluo,reutilizaoe
assimpordiante.Todosinfluenciamadecomposio,freqentemente
deformasconflitantes.[3]
Muitodosobjetosparticipantesprovmdomtododeanlise.Porm,
projetosorientadosaobjetosacabamsendocompostosporobjetos
quenopossuiumacontrapartidanomundoreal.
Asabstraesquesurgemduranteumprojetosoaschavespara
tornaloflexvel.Ospadresdeprojetoajudamaidentificar
abstraesmenosbviasbemcomoosobjetosquepodemcaptur
las.Porexemplo,objetosquerepresentamprocessooualgoritmono
ocorremnanatureza,noentanto,elessoumapartecrucialde
projetosflexveis.Essesobjetossoraramenteencontradosdurantea
anliseoumesmoduranteosestgiosiniciaisdeumprojetoelesso
descobertosmaistarde,duranteoprocessodetornarumprojetomais
flexvelereutilizvel.

Como selecionar um padro de projeto


Escolherdentreospadresexistentesaquelequemelhorsolucionaum
problemadoprojeto,semcometeroerrodeescolherdeforma
errneaetornloinvivel,umadastarefasmaisdifceis.Emsuma,
aescolhadeumpadrodeprojetoaserutilizado,podeserbaseada
nosseguintescritrios:
1.Considerarcomoospadresdeprojetosolucionamproblemasde

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

9/25

01/08/2016

ConheaosPadresdeProjeto

projeto.
2.Examinarqualaintenodopadro,ouseja,oquefazdefatoo
padrodeprojeto,quaisseusprincpiosequetpicoou
problemaparticulardeprojetoeletrata(soluciona).
3.Estudarcomoospadresserelacionam.
4.Estudarassemelhanasexistentesentreospadres.
5.Examinarumacausadereformulaodeprojeto.
6.Consideraroquedeveriaservarivelnoseuprojeto,ouseja,ao
invsdeconsideraroquepodeforarumamudanaemum
projeto,consideraroquevocquersercapazdemudarsem
reprojetlo.

Como usar um padro de projeto


Depoisdetersidofeitaaescolhado(s)padro(es)aser(em)
utilizado(s)noprojetonecessriaconhecercomoutilizlo(s).Uma
abordagemrecomendadapelaganguedosquatrosamigosparaaplicar
umpadroaumprojeto:
1.Leropadroporcompletoumavez,paraobtersuavisogeral.
Conheceropadroprincipalmenteasuaaplicabilidadee
conseqnciassoimportantesparaqueelerealmentesolucione
oseuproblema
2.EstudarseesEstrutura,ParticipanteseColaboraes.
Assegurandosedequecompreendeuasclasseseobjetosno
padroecomoserelacionamentresi
3.Escolherosnomesparaosparticipantesdopadroquetenham
sentidonocontextodaaplicao
4.Definirasclasses.Declararasinterfaces,estabelecerosseus
relacionamentosdeheranaedefinirasvariveisdeinstncia
querepresentamdadoserefernciasaobjetos.Identifiqueas
classesexistentesnaaplicaoqueseroafetadaspelopadroe
modifiqueas

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

10/25

01/08/2016

ConheaosPadresdeProjeto

5.Definaosnomesespecficosdaaplicaoparaasoperaesno
padro.Osnomesemgeraldependemdaaplicao.Useas
responsabilidadesecolaboraesassociadascomcadaoperao
comoguia
6.Implementeasoperaesparasuportarasresponsabilidadese
colaboraespresentesdopadro.AseodeImplementao
oferecesugestesparaguilonaimplementao.
Essassoapenasdiretrizesquepodemserutilizadasatqueseja
obtidoexperinciaeconhecimentonecessrioparadesenvolveruma
maneiradetrabalhoparticularcomospadresdeprojeto.Ospadres
deprojetonodevemseraplicadosindiscriminadamente.
Freqentementeelesobtmflexibilidadeevariabilidadepela
introduodenveisadicionaisdeendereamentoindireto,eissopode
complicarumprojetoe/oucustaralgoemtermosdedesempenho.Um
padrodeprojetodeverapenasseraplicadoquandoaflexibilidade
queeleofereceforrealmentenecessria.[3]

Principais padres de projeto


UmarpidaleituradoscdigosdaVCL(VisualComponentLibrary)do
Delphiconstatasequeelaforaconstrudofazendousointensivodos
padresdeprojetos.Oquemuitobom,poisconstataonvelde
excelnciadaferramenta.IstodevidoaoDelphiimplementar
completamenteasboasprticasdaorientaoaobjetosOOP,que
auxiliamnaimplementaodeprojetosreutilizveis.

Padres de criao

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

11/25

01/08/2016

ConheaosPadresdeProjeto

Ospadresdecriaosoaquelesqueabstraemeouadiamo
processocriaodosobjetos.Elesajudamatornarumsistema
independentedecomoseusobjetossocriados,compostose
representados.Umpadrodecriaodeclasseusaaheranapara
variaraclassequeinstanciada,enquantoqueumpadrodecriao
deobjetodelegarainstanciaoparaoutroobjeto.
Ospadresdecriaotornamseimportantesmedidaqueos
sistemasevoluemnosentidodedependeremmaisdacomposiode
objetosdoqueaheranadeclasses.Odesenvolvimentobaseadona
composiodeobjetospossibilitaqueosobjetossejamcompostos
semanecessidadedeexporoseuinteriorcomoacontecenaherana
declasse,oquepossibilitaadefiniodocomportamento
dinamicamenteeanfasedeslocasedacodificaodemaneirargida
deumconjuntofixodecomportamentos,paraadefiniodeum
conjuntomenordecomportamentosquepodemsercompostosem
qualquernmeroparadefinircomportamentosmaiscomplexos.
Hdoistemasrecorrentesnessespadres.Primeirotodosencapsulam
conhecimentosobrequaisclassesconcretassousadaspelosistema.
Segundoocultamomodocomoessasclassessocriadasemontadas.
Tudoqueosistemasabenogeralsobreosobjetosquesuasclasses
sodefinidasporclassesabstratas.Conseqentemente,ospadresde
criaodomuitaflexibilidadenoquecriado,quemcria,comoe
quandocriado.Elespermitemconfigurarumsistemacomobjetos
produtoquevariamamplamenteemestruturaefuncionalidade.A
configuraopodeseresttica(isto,especificadaemtempode
compilao)oudinmica(emtempodeexecuo).

Abstract Factory
Inteno

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

12/25

01/08/2016

ConheaosPadresdeProjeto

Fornecerumainterfaceparacriaodefamliasdeobjetos
relacionadosoudependentessemespecificarsuasclassesconcretas.
TambmconhecidocomoKit.[3]
Motivao
Estepadrodeveseraplicadoquandosedesejaisolaraaplicaoda
implementaodaclasseconcreta,quepoderiaserumcomponentee
ouframeworkespecficonoqualaaplicaoconheceriaapenasuma
interfaceeaimplementaoconcretaseriaconhecidaapenasem
tempodeexecuooucompilao.
Imaginequeemumaaplicaohouvesseanecessidadedequeela
fosseimplementadaparaoferecersuporteaplataformase
caractersticasdistintas.Porexemplo:Umavisodesktopeuma
mvel(celularPocketPC).Amaneiradeconstitula,seriadefinindo
umafamliadecomponentesparacadaplataformaeumafbricaque
osinstanciadeacordocomaplataformaalvonaqualaaplicao
estarsendoexecutada.

Figura1

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

13/25

01/08/2016

ConheaosPadresdeProjeto

Aplicabilidade
Deacordocomoexpostopelosquatroamigos,ousodopadro
AbstractFactorydeveestarrestritoasseguintessituaes:
Umsistemadeveserindependentedecomoseusprodutosso
criados,compostosourepresentados
Umsistemadeveserconfiguradocomoumprodutodeuma
famliademltiplosprodutos
Umafamliadeobjetosforprojetadaparaserusadaem
conjunto,evocnecessitagarantirestarestrio
Vocquerfornecerumabibliotecadeclassesdeprodutosequer
revelarsomentesuasinterfaces,nosuasimplementaes.
Estrutura
AestruturaarquiteturaldopadrodefinidosegundoGoFdeacordo
comoapresentadonaFigura1.Aestruturadeumexemplomaisde
acordocomarealidadedodesenvolvedorapresentadanaFigura2.A
idiabsicaapresentadapelafiguraadeofereceraousurio
(desenvolvedor)apossibilidadedeexecutarumaaplicaosobre
diferentesplataformas.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

14/25

01/08/2016

ConheaosPadresdeProjeto

Figura2

Participantes
ComponentFactorydeclaraumainterfaceparaoperaesque
criamobjetosdoscomponentesutilizadosnaaplicao
PocketFactoryclasseconcretaqueimplementaasoperaes
quecriamosobjetosnoformatododispositivocliente
PCFactoryclasseconcretaqueimplementaasoperaes
responsveisporcriarosobjetosnoformatodoPC.
Conseqncias
OpadroAbstractFactorypossuiosseguintesbenefciose
desvantagens:
Eleisolaasclassesconcretas.
Eletornafcilatrocadefamliasdeprodutos.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

15/25

01/08/2016

ConheaosPadresdeProjeto

Elapromoveaharmoniaentreprodutos.
difcildesuportarnovostiposdeprodutos.

Factory Method
Inteno
Definirumainterfaceparacriarobjetos,masdeixarqueassubclasses
decidemqueclasseinstanciar.OFactoryMethod,tambmconhecido
comoconstrutorvirtual,possibilitaadiaracriaodoobjetoa
subclasses[3].
Motivao
Essepadrocomumenteutilizadopelosprojetistasdesoftware
quandoexisteanecessidadedeencapsularacriaodeumaclassese
isolandodoconhecimentodaclasseconcretadaaplicaocliente
atravsdeumainterface.Essanecessidadecomumentedesejada
poraquelesquetrabalhamnodesenvolvimentodeframeworks,que
utilizamclassesabstratasparadefiniremanterrelacionamentosentre
osobjetos.Dessaformaosclientesimplementamasfuncionalidades
esperadaspeloframeworkadicionandoalgicadenegcioespecfica
daaplicao,semqueoframeworktenhaoconhecimentodecomoe
qualalgicaimplementadapelaaplicaoparacomplementalo.
Umexemplodeutilizaodopadropodesernaconstruode
aplicaesquetenhaquedarsuporteadiferentesimplementaesde
persistnciacomomnimoderetrabalho.
Aplicabilidade
AutilizaodopadroFactoryMethodpodeestarcondicionada
quando:
1.Umaclassenopodeanteciparaclasse/tipodeobjetosque

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

16/25

01/08/2016

ConheaosPadresdeProjeto

devemcriar
2.Umaclasseespecifiquequesuassubclassestenhamo
conhecimentodosobjetosquecriam
3.Classesquedelegamresponsabilidadeparaumadentrevrias
subclassesauxiliares,evocquerobteroconhecimentodequal
subclasseauxiliarqueadelegada.
Estrutura

Figura3

Participantes
Productdefineainterfacedeobjetosquedeversercriado
pelomtodofbrica
ConcreteProductimplementaodainterfaceProduct
Creatordeclaraomtodofbricaoqualretornaumobjetodo
tipoProduct
ConcreteCreatorredefine(override)omtodofbricaque
retornaumainstnciaconcretadainterfaceProduct.
Conseqncias

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

17/25

01/08/2016

ConheaosPadresdeProjeto

OpadroFactoryMethodeliminaanecessidadedeanexarclasses
especficasdasaplicaesnocdigo.Ocdigolidasomentecoma
interfacedeProductportantoelepodetrabalharcomqualquer
implementaodaclassequeimplementaProduct,definidapelo
usurio.

Singleton
Inteno
Garantirqueumobjetoterapenasumanicainstncia,isto,que
umaclasseirgerarapenasumobjetoequeesteestardisponvelde
formanicaparatodooescopodeumaaplicao[3].
Motivao
Algumasaplicaestmanecessidadedecontrolaronmerode
instnciascriadasdealgumasclasses,sejapelanecessidadeda
prprialgicaoupormotivosdeperformanceeeconomiaderecursos.
Imagineomomentoemqueumaaplicaoqueexista
simultaneamentenumdispositivomvel(PocketPC,Celular,Palm)e
numambientecorporativo,necessitedeumprocessodesincronizao
entreasinformaesprocessadasnodispositivomvelenabase
corporativa.Ambasaplicaesdeveriamsecomunicarcomumobjeto
quedeveriasernicoparaprocessarestesincronismo,afimdeevitar
apossibilidadedecriardadosnabase.

Figura4

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

18/25

01/08/2016

ConheaosPadresdeProjeto

Aplicabilidade
OusodopadroSingletonestcondicionadoa:
Quandofornecessriomanternumsistema,sejaeledistribudo
ouno,apenasumainstnciadeobjetoequeopontodeacesso
paraestesejabemconhecido(Ex.objetoresponsvelporum
pooldeimpressonumarede,gerenciadordejanelas)
Quandoanicainstnciativerdeserextensvelatravsde
subclasses,possibilitandoaosclientesusaremumainstncia
estendidasemalteraroseucdigo(visespolimrficas).
OdesenvolvedoresDelphijutilizamocomportamentodopadro
Singletonemsuasaplicaes,quandodeclaramvariveisglobaisna
readeinicializaodoprojetoedepoisreutilizamainstnciados
objetos.TApplication,TCiipBoardsoexemplosdeobjetosqueno
teriamsentidoexistirmaisdeumainstncianaaplicaoeporisso
assumemocomportamentodopadroSingleton.
Estrutura

Figura5

Participantes
1.Singletondefineummtodoestticoquepermiteaosclientes
obteremoobjetonico.Eletambmserresponsvelpelo
processodecriaodoobjeto.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

19/25

01/08/2016

ConheaosPadresdeProjeto

Conseqncias
Osbenefciosqueopadroapresentaso:
Acessocontroladoainstncianica
Espaodenomesreduzido(diganoaproliferaodevariveis
globais)
Permiteumrefinamentodeoperaeserepresentaes
PermiteumnmerovariveldeinstnciasOpadropossibilita
quesejaadotadaaestratgicadecriarmaisdeumainstnciada
classe,deformacontrolada
Maisflexveldoqueasoperaesdeclasse

Padres estruturais
Ospadresestruturaissepreocupamcomaformacomoclassese
objetossocompostosparaformarestruturasmaiores.Osdeclasses
utilizamaheranaparacomporinterfacesouimplementaes,eos
deobjetoaoinvsdecomporinterfacesouimplementaes,eles
descrevemmaneirasdecomporobjetosparaobternovas
funcionalidades.Aflexibilidadeobtidapelacomposiodeobjetos
provmdacapacidadedemudaracomposioemtempodeexecuo
oquenopossvelcomacomposioesttica(heranadeclasses).

Adapter
Inteno
Converterainterfacedeumaclasseporoutraesperadapelosclientes
[3].Oquepossibilitaqueclassescominterfacesincompatveis
trabalhememconjuntoouque,deoutraforma,seria
impossvel.TambmconhecidocomoWrapper(adaptador).

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

20/25

01/08/2016

ConheaosPadresdeProjeto

Motivao
Algumasvezes,umaclassedeumtoolkit,projetadaparaser
reutilizadanocondizcomainterfaceespecficadeumdomnio
requeridaporumaaplicao.
Aplicabilidade
Ousodopadroestcondicionadoa:
1.Usarumaclasseexistente,massuainterfacenocorresponde
interfacerequerida
2.Criarclassesreutilizveisquecooperamcomclassesno
relacionadasounoprevistas,ouseja,classescominterface
inicialmenteincompatvel.
Estrutura
NaFigura3apresentadaaestruturadopadrobaseadonaherana,
enafigura4abaseadanacomposiodeobjetos.
Participantes
1.Target(Alvo)defineainterfaceespecficadodomniodo
cliente
2.Client(cliente)colaboracomobjetoscompatveiscomTarget
3.Adaptee(Adaptao)interfaceexistentedenecessitade
adaptao
4.Adapter(Adaptador)adaptaainterfaceAdaptee
interfaceTarget.
Conseqncias
Paraadaptaesdeclasses:
Umadaptadordeclassenofuncionarquandoquisermos
adaptarumaclasseetodasassuassubclasses
PermiteaAdaptersubstituiralgumcomportamentodeAdaptee,

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

21/25

01/08/2016

ConheaosPadresdeProjeto

jqueAdapterumasubclasse.
Paraadaptaesdeobjetos:
PermiteaumnicoAdapteradaptarumAdapteeesuas
subclasses
TornamaisdifcilredefinirocomportamentodeumAdaptee.
ConseguidoatravsdeumasubclassedeAdapteeque
referenciadaporAdapter.

Padres de comportamento
Ospadresdecomportamentoseconcentramnosalgoritmose
atribuiesderesponsabilidadesentreosobjetos.Elesnodescrevem
apenaspadresdeobjetosoudeclasses,mastambmospadresde
comunicaoentreosobjetos.
Ospadrescomportamentaisdeclassesutilizamaheranapara
distribuirocomportamentoentreclasses,eospadresde
comportamentodeobjetoutilizamacomposiodeobjetosem
contrapartidaaherana.Algunsdescrevemcomogruposdeobjetos
cooperamparaaexecuodeumatarefaquenopoderiaser
executadaporumobjetosozinho.

Template Method
Inteno
Definiroesqueletodeumalgoritmoemumaoperao,
postergando(deferring)algunspassosparasubclasses.Template
Method(gabaritodemtodo)permitequesubclassesredefinamcertos
passosdeumalgoritmosemmudaraestruturadomesmo.[3]
Motivao

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

22/25

01/08/2016

ConheaosPadresdeProjeto

Imaginequevoctenhadeconstruirumaaplicaoquepossuiuma
determinadafunodaqualsdeconhecimentooalgoritmode
execuo,eotrabalhodecodificaopararealizaodaoperao
possaserpostergado.
Aplicabilidade
Paraimplementaraspartesinvariantesdeumalgoritmoedeixar
parasubclassesaimplementaodapartevariante
Parafatorarocomportamentosemelhanteentresubclasses
numasuperclasseevitandoseassimaduplicaodecdigo
Paracontrolarextensesdeclassescommtodos"gancho"
Estrutura

Figura6

Participantes
AbstractClassdefineasoperaesprimitivaseabstratasque
representamospassosdeumalgoritmoeimplementaum
mtodoqueinvocaestasoperaesprimitivas
ConcreteClassimplementaasoperaesespecficasdefinidas
nasuperclassecomocdigoespecfico.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

23/25

01/08/2016

ConheaosPadresdeProjeto

Conseqncias
Osmtodostemplatesoumatcnicafundamentalparaareutilizao
decdigo.Elesconduzemaumaestruturadeinversodecontrole
eminglsInversionofControlIoCouprincpiodadependncia
inversa,comumenteconhecidacomooprincpiodeHollywood,ou
seja:nonoschame,nschamaremosvoc.Istoserefereacomo
umaclassemechamaasoperaesdeumasubclasse,enoo
contrrio.

Concluses
Ousodepadresdeprojetopropiciaaconstruodeaplicaeseou
estruturasdecdigodeformaflexveleadocumentaodesolues
reaproveitveis.Atravsdospadresdeprojetopossvelidentificar
ospontoscomunsentreduassoluesdiferentesparaummesmo
problema.Conheceressespontoscomunsnospermitedesenvolver
soluescadavezmelhoresemaiseficientesquepodemser
reutilizadas,permitindo,assim,oavanodoconhecimentohumano.
Ospadrespossibilitamatravsdeumalinguagemclaraeconcisa,
queosprojetistasexperientestransfiramosseusconhecimentosaos
maisnovosemumaltonveldeabstraoeassimfacilitamo
desenvolvimentoeoreaproveitamentodecdigo.

Referncias
PAGEJONES,Meilir.Fundamentosdodesenhoorientadoa
objetocomUML.2ed.SoPaulo:MakronBooks,2001.
HEYWORTH,James,IntroductiontoDesignPatternsinDelphi.
ltimavisitaem:08defevereirode2005.
GAMMA,Erich,HELM,RichardJOHNSON,Ralph,VLISSIDES,
John.PadresdeProjeto:soluesreutilizveisdesoftware

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

24/25

01/08/2016

ConheaosPadresdeProjeto

orientadoaobjetos.1.ed.PortoAlegre:Bookman,2000.
KOENIG,Andrew.AntiPatterns.ltimavisitaem08defevereiro
de2005.
ALEXANDER,Christopher,etal.APatternLanguage.Oxford
UniversityPress,NewYork,1977

porAlessandroFerreira
Delphinaveia(!)

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=957

25/25

Você também pode gostar