Você está na página 1de 23

22/09/2016

ConheaosPadresdeProjeto

Buscar

favorito(30)

marcarcomolido

tirardvidas

Conhea os Padres de Projeto


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

(20) (0)

Oobjetivodestetextoapresentarumtemaquenosltimosanostemganhadoaateno
dacomunidadedesoftware,queacadadiacobradaparaprojetarsoluesdesoftware
commelhorqualidadeecomomenorcusto.Umaformasemdvidaquecontribuiparaa
obtenonaqualidadeseprojetosdesoftwaresoospadresdeprojetos,eminglsdesign
patterns.
Nodecorrerdotextoserapresentadaumadefiniodoque,eoquecaracterizaum
padrodeprojeto,alm,clarodemostrarqueousoexageradopodelevarasituao
inversaaquesepropemospadresdeprojeto.
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

1/23

22/09/2016

ConheaosPadresdeProjeto

Introduo
Atualmentenoseconcebeumprocessodedesenvolvimentodesoftwaresriosema
utilizaodaorientaoaobjetos,poisestapermiteagregarqualidadesimportantesaos
sistemasdesenvolvidossobseusparadigmas,comoaextensabilidadeeareusabilidade[1]
Massomenteporestarutilizandoa,nogarantiadeseobteressasqualidades.Paracriar
asmelhoressolues,precisoseguirumprocessodetalhadoparaobterumaanlisedos
requisitos,funcionaisounofuncionais,edesenvolverumprojetoqueossatisfaaeque
possibilitesubmetlosateste,paraconstatareventuaisfalhas,almdomaissedesejaque
oprojetotenhaumaarquiteturaflexvelparaacomodarfuturosproblemaserequisitossema
necessidadedarealizaodoreprojeto.
Analisandoocotidianododesenvolvimentodesoftwarepossvelidentificarqueaprocura
porumasoluoaumproblemaespecficopossuicaractersticasidnticas,senoiguala
encontradaemumprojetoanteriormentedesenvolvido,masquedevidodeficinciado
processo,asoluoeoproblemanoforadocumentadoesvezestopouco
compreendidoemsuatotalidadeimpossibilitandooreaproveitamentodasidiasesolues.
Destaforma,problemasidnticosqueserepetememoutroscontextosnosoreconhecidos
comotal,consumindotempoerecursosembuscadesoluesqueemtese,jhaviamsido
encontradas.
Umacoisaqueosprojetistasavanadossabemquenodevemfazerresolvercada
problemaapartirdeprincpioselementaresoudozero.Aoinvsdisso,elesreutilizam
soluesquefuncionaramnopassado,eosutilizamrepetidamenteemseusprojetos.
comoresolverumproblemamatemticoatentoindito,oupelo,menosdesconhecidoa
algum.Primeiroutilizasetodososconhecimentoseprincpiosmatemticosquesetem
conhecimentoequevenhaasertilnasoluo,depoisdealgumastentativaseusodas
teoriasmatemticas,chegasesoluoeapartirdatemseumalgoritmo(estrutura)
montadoquepodeserutilizadopararesolvertantosproblemasexistiremequesejam
idnticosaoresolvido,emesmoquenoseja,possvelreaproveitarasidiaseconcluses
doproblemaresolvido.porissoqueospadresdeprojetos,designpatterns,temchamado
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

2/23

22/09/2016

ConheaosPadresdeProjeto

aatenoedespertadoointeressedosprojetistasdesoftware,porproporcionarelementos
queconduzemaoreaproveitamentodesoluesparaprojetos,enoapenasareutilizao
decdigo.
Ospadresdeprojetostornammaisfcilreutilizarsoluesearquiteturasbemsucedidas
paraconstruirsoftwaresorientadosaobjetosdeformaflexvelefcildemanter.Ousode
padresdeprojetopodereduziracomplexidadedoprocessodeprojetarsoftware.Alm
disso,osoftwareorientadoaobjetosbemprojetadopossibilitaaosprojetistasreutilizare
empregarcomponentespreexistentesemsistemasfuturos.
Emsoftware,ospadresdeprojetonosoclassesnemobjeto.Emvezdisso,osprojetistas
usamessespadresparaconstruirconjuntosdeclasseseobjetos.Parautilizlosde
maneiraeficaz,osprojetistasprecisamsefamiliarizarcomospadresmaispopularese
eficazesutilizadospelaengenhariadesoftwareeconheceroseucontextoeescopo.
Aidiadeprojetarsoluesapartirdealgojconhecidoedocumentado,nonovaeto
poucoteveorigemnaindustriadesoftware,apesardelajdemonstraruminteressepelo
tema.Aidiasurgiuem1977quandoChristopherAlexanderpublicouumcatlogocommais
de250padresparaaarquiteturacivil,quediscutiamquestescomunsdaarquitetura,
descrevendoemdetalheoproblemaeasjustificativasdesuasoluo.
ChristopherAlexanderdescobriuquediminuindoofoco,ouseja,procurandoestruturasque
resolvamproblemassimilares,elepodediscernirsimilaridadesentreprojetosdealta
qualidade.Elechamouessassimilaridadesdepadres[5].
Algumtempodepoiseleformalizaseumtododedescriodospadres,defendendoque
seuusonolimitariaosarquitetosssoluesprescritas,masgarantiriaapresenade
elementosfundamentais,eapossibilidadedeaperfeioalaatravsdasexperincias
adquiridas.Essemtodochamouatenodacomunidadedesoftware,fazendoqueotema
ganhassedestaquenasconfernciassobreorientaoaobjetos.Em1995ErichGama,
RichardHelm,RalphJohnson,JohnVlissides,conhecidoscomoosquatroamigos[Gangof
FourGoF],publicaramolivrosobreottulo:Designpatternselementsofreusableobject
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

3/23

22/09/2016

ConheaosPadresdeProjeto

orientedsoftware,AddisonWesleyLongman,queganhouumaversonalnguaportuguesa
sobreottulodePadresdeProjetoSoluesreutilizveisdesoftwareorientadoa
objetos.Bookman.Olivroumcatlogoquedescreve23padresdeprojetocadaum
fornecendoumasoluoparaumproblemadesoftware,seucontexto,aplicaoesuas
eventuaisconseqncias,dividindoosem3categorias:padresdecriao,estruturais,ede
comportamento.

Denindo padres de projeto


Definiroqueumpadrodeprojetodemaneiraclaraeobjetiva,temsidooobjetivoda
comunidadedesoftware,desdeadcadade80.Oprimeiroaapresentarumadefiniodo
queseriaumpadro,foioarquitetodeprofessorChristopherAlexandre,noseulivroA
TimesWayofBuilding(OxfordUniversityPress,1979),que:Cadapadroumaregrade
trspartes,queexpressaumarelaoentreumcertocontexto,umproblemaeuma
soluo.Sendoassimparaentenderanecessidade,existncia,deumpadronecessrio
estudarsuaspartes:oproblema,asoluoeocontextosobreoqualeleaplicvel.
Dessaforma,resumidamentepodeseentendercomopadrodeprojeto,comoasoluo
recorrenteparaumproblemaemumcontexto,mesmoqueemprojetosereasdistintas.
Observequeostermoschavesdessadefinioso:contexto,problemaesoluo,oque
tornaobrigatriocompreensoinequvocadecadaum.Umcontextodizrespeitoao
ambiente,eascircunstnciasdentrodoqualalgoexiste.Oproblemaaquestoindefinida,
algoqueprecisaserinvestigadoesolucionado.Normalmente,estatreladoaocontextoem
queocorre.Finalmente,asoluorefererespostadoproblemaqueajudaasolucionalo.
Entretanto,setivermosumasoluoparaumproblemaemumcertocontexto,elano
necessariamentepodeconstituirumpadro,poisnecessrioqueelatenhacomo
caractersticaaregularidade,isto,elaseconstituircomoumpadrosepuderserutilizada
repetidamente.

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

4/23

22/09/2016

ConheaosPadresdeProjeto

SegundoChristopherAlexander,cadapadrodescreveumproblemanonossoambienteeo
ncleodasuasoluo,detalformaquevocpossausarestasoluomaisdeummilhode
vezes,semnuncafazelodamesmamaneira.
Ogrupodosquatroamigosclassificouospadresdeprojetopordoiscritrios.Oprimeiro
critrioafinalidaderefleteoqueumpadrofaz.Ospadrespodemterfinalidadesde
criao,comportamentoeestrutural.Ospadresdecriaodescrevemastcnicaspara
instanciarobjetos(ougruposdeobjetos),epossibilitamorganizarclasseseobjetosem
estruturamaiores,osdecomportamentosecaracterizampelamaneirapelasquaisclasses
ouobjetosinteragemedistribuemresponsabilidadeseosestruturaislidamcoma
composiodeclassesouobjetos.Osegundocritriooescopoespecificaseopadro
aplicadoclasseouobjeto.

Caractersticas de um padro de projeto


Emboraumpadrosejaadescriodeumproblema,deumasoluogenricaesua
justificativa,issonosignificaquequalquersoluoconhecidaparaumproblemapossa
constituirumpadro,poisexistemcaractersticasobrigatriasquedevemseratendidas
pelospadres:[3].
1.Devempossuirumnome,quedescrevaoproblema,assolueseconseqncias.Um
nomepermitidefinirovocabulrioaserutilizadopelosprojetistasedesenvolvedores
emumnvelmaisaltodeabstrao.
2.Todopadrodeverelatardemaneiraclaraaqual(is)problema(s)eledeveser
aplicado,ouseja,quaissoosproblemasquequandoinseridoemumdeterminado
contextoopadroconseguirresolvelo.Algunspodendoexigirprcondies.
3.Soluodescreveoselementosquecompemoprojeto,seusrelacionamentos,
responsabilidadesecolaboraes.Umpadrodeveserumasoluoconcreta,ele
deveserexprimidoemformadegabarito(algoritmo)que,noentantopodeseraplicado
demaneirasdiferentes.

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

5/23

22/09/2016

ConheaosPadresdeProjeto

4.Todopadrodeverelatarquaissoassuasconseqnciasparaquepossaser
analisadaasoluoalternativadeprojetoseparaacompreensodosbenefciosda
aplicaodoprojeto.
Nopodeserconsideradoumpadrodeprojetotrechodecdigosespecficos,mesmoque
paraoseucriadorelereflitaumpadro,quesolucionaumdeterminadoproblema,porqueos
padresdevemestaraumnvelmaiordeabstraoenolimitadoarecursosde
programao.Umpadrodeprojetonomeia,abstraieidentificaosaspectoschavesdeuma
estruturadeprojetocomumparatornalatilparaacriaodeumprojetoorientadoa
objetosreutilizvel[3].

A importncia dos padresde projeto


Omaisimportantesobreospadresqueelessosoluesaprovadas.Cadacatlogo
incluiapenaspadresqueforamconsideradosteispordiversosdesenvolvedoresemvrios
projetos.Ospadrescatalogadostambmsobemdefinidososautoresdescrevemcada
padrocommuitocuidadoeemseuprpriocontexto,portantoserfcilaplicaropadroem
suasprpriascircunstncias.Elestambmformamumvocabulriocomumentreos
desenvolvedores.

Quandoos padres no o ajudaro


Ospadressoummapa,noumaestratgica.Oscatlogosgeralmenteapresentaro
algumcdigofontecomoumaestratgicadeexemplo,portantoelesnodevemser
consideradoscomodefinitivos.Ospadresnoajudaroadeterminarqualaplicaovoc
deveestarescrevendoapenascomoimplementarmelhoraaplicaoassimqueoconjunto
derecursoseoutrasexignciasforemdeterminados.Ospadresajudamcomoqueecomo,
masnocomporqueouquando.
Oconceitodeutilizarospadresdeformaindiscriminadaconhecidacomoantipadres
(antipatterns).DeacordocomAndrewKoenig[3],seumpadrorepresentaamelhor
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

6/23

22/09/2016

ConheaosPadresdeProjeto

prtica,entoumantipadrorepresentaumalioaprendida.
Existemduasnoesdeantipadres:
1.Aquelesquedescrevemumasoluoruimparaumproblemaqueresultouemuma
situaoruim
2.Aquelesquedescrevemcomoselivrardeumasituaoruimecomoprocederdessa
situaoparaumasituaoboa.
Emsumaumantipadroconstituiaousoindevidodospadresdeprojeto,ouoseuuso
exagerado,oquepodeserconstatadopelautilizaodepadresimprpriosparaum
determinadocontexto,ouusoinadequado.Autilizaodospadresproporcionaum
aumentonaflexibilidadedosistema,entretantopodedeixalomaiscomplexooudegradara
performance.Algumasperdassotolerveis,massubestimarosefeitoscolateraisda
adoodospatterns,umerrocomum,principalmentedaquelesquetomamousocomoum
diferencialenopelarealnecessidade.

Como padres de projeto solucionam problemas de


projeto
Oalvoprincipaldousodospadresdeprojetonodesenvolvimentodesoftwareoda
orientaoaobjetos.ComoosobjetossooselementoschavesemprojetosOO,aparte
maisdifcildoprojetoadecomposiodeumsistemaemobjetos.Atarefadifcilporque
muitosfatoresentramemjogo:encapsulamento,granularidade,dependncia,flexibilidade,
desempenho,evoluo,reutilizaoeassimpordiante.Todosinfluenciamadecomposio,
freqentementedeformasconflitantes.[3]
Muitodosobjetosparticipantesprovmdomtododeanlise.Porm,projetosorientadosa
objetosacabamsendocompostosporobjetosquenopossuiumacontrapartidanomundo
real.

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

7/23

22/09/2016

ConheaosPadresdeProjeto

Asabstraesquesurgemduranteumprojetosoaschavesparatornaloflexvel.Os
padresdeprojetoajudamaidentificarabstraesmenosbviasbemcomoosobjetosque
podemcapturlas.Porexemplo,objetosquerepresentamprocessooualgoritmono
ocorremnanatureza,noentanto,elessoumapartecrucialdeprojetosflexveis.Esses
objetossoraramenteencontradosduranteaanliseoumesmoduranteosestgiosiniciais
deumprojetoelessodescobertosmaistarde,duranteoprocessodetornarumprojeto
maisflexvelereutilizvel.

Como selecionar um padro de projeto


Escolherdentreospadresexistentesaquelequemelhorsolucionaumproblemadoprojeto,
semcometeroerrodeescolherdeformaerrneaetornloinvivel,umadastarefasmais
difceis.Emsuma,aescolhadeumpadrodeprojetoaserutilizado,podeserbaseadanos
seguintescritrios:
1.Considerarcomoospadresdeprojetosolucionamproblemasdeprojeto.
2.Examinarqualaintenodopadro,ouseja,oquefazdefatoopadrodeprojeto,
quaisseusprincpiosequetpicoouproblemaparticulardeprojetoeletrata
(soluciona).
3.Estudarcomoospadresserelacionam.
4.Estudarassemelhanasexistentesentreospadres.
5.Examinarumacausadereformulaodeprojeto.
6.Consideraroquedeveriaservarivelnoseuprojeto,ouseja,aoinvsdeconsideraro
quepodeforarumamudanaemumprojeto,consideraroquevocquersercapazde
mudarsemreprojetlo.

Como usar um padro de projeto


Depoisdetersidofeitaaescolhado(s)padro(es)aser(em)utilizado(s)noprojeto
necessriaconhecercomoutilizlo(s).Umaabordagemrecomendadapelaganguedos
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

8/23

22/09/2016

ConheaosPadresdeProjeto

quatrosamigosparaaplicarumpadroaumprojeto:
1.Leropadroporcompletoumavez,paraobtersuavisogeral.Conheceropadro
principalmenteasuaaplicabilidadeeconseqnciassoimportantesparaqueele
realmentesolucioneoseuproblema
2.EstudarseesEstrutura,ParticipanteseColaboraes.Assegurandosedeque
compreendeuasclasseseobjetosnopadroecomoserelacionamentresi
3.Escolherosnomesparaosparticipantesdopadroquetenhamsentidonocontextoda
aplicao
4.Definirasclasses.Declararasinterfaces,estabelecerosseusrelacionamentosde
heranaedefinirasvariveisdeinstnciaquerepresentamdadoserefernciasa
objetos.Identifiqueasclassesexistentesnaaplicaoqueseroafetadaspelopadro
emodifiqueas
5.Definaosnomesespecficosdaaplicaoparaasoperaesnopadro.Osnomesem
geraldependemdaaplicao.Useasresponsabilidadesecolaboraesassociadas
comcadaoperaocomoguia
6.Implementeasoperaesparasuportarasresponsabilidadesecolaboraes
presentesdopadro.AseodeImplementaooferecesugestesparaguilona
implementao.
Essassoapenasdiretrizesquepodemserutilizadasatquesejaobtidoexperinciae
conhecimentonecessrioparadesenvolverumamaneiradetrabalhoparticularcomos
padresdeprojeto.Ospadresdeprojetonodevemseraplicadosindiscriminadamente.
Freqentementeelesobtmflexibilidadeevariabilidadepelaintroduodenveisadicionais
deendereamentoindireto,eissopodecomplicarumprojetoe/oucustaralgoemtermosde
desempenho.Umpadrodeprojetodeverapenasseraplicadoquandoaflexibilidadeque
eleofereceforrealmentenecessria.[3]

Principais padres de projeto


http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

9/23

22/09/2016

ConheaosPadresdeProjeto

UmarpidaleituradoscdigosdaVCL(VisualComponentLibrary)doDelphiconstatase
queelaforaconstrudofazendousointensivodospadresdeprojetos.Oquemuitobom,
poisconstataonveldeexcelnciadaferramenta.IstodevidoaoDelphiimplementar
completamenteasboasprticasdaorientaoaobjetosOOP,queauxiliamna
implementaodeprojetosreutilizveis.

Padres de criao
Ospadresdecriaosoaquelesqueabstraemeouadiamoprocessocriaodos
objetos.Elesajudamatornarumsistemaindependentedecomoseusobjetossocriados,
compostoserepresentados.Umpadrodecriaodeclasseusaaheranaparavariara
classequeinstanciada,enquantoqueumpadrodecriaodeobjetodelegara
instanciaoparaoutroobjeto.
Ospadresdecriaotornamseimportantesmedidaqueossistemasevoluemnosentido
dedependeremmaisdacomposiodeobjetosdoqueaheranadeclasses.O
desenvolvimentobaseadonacomposiodeobjetospossibilitaqueosobjetossejam
compostossemanecessidadedeexporoseuinteriorcomoacontecenaheranadeclasse,
oquepossibilitaadefiniodocomportamentodinamicamenteeanfasedeslocaseda
codificaodemaneirargidadeumconjuntofixodecomportamentos,paraadefiniode
umconjuntomenordecomportamentosquepodemsercompostosemqualquernmero
paradefinircomportamentosmaiscomplexos.
Hdoistemasrecorrentesnessespadres.Primeirotodosencapsulamconhecimentosobre
quaisclassesconcretassousadaspelosistema.Segundoocultamomodocomoessas
classessocriadasemontadas.Tudoqueosistemasabenogeralsobreosobjetosque
suasclassessodefinidasporclassesabstratas.Conseqentemente,ospadresdecriao
domuitaflexibilidadenoquecriado,quemcria,comoequandocriado.Elespermitem
configurarumsistemacomobjetosprodutoquevariamamplamenteemestruturae

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

10/23

22/09/2016

ConheaosPadresdeProjeto

funcionalidade.Aconfiguraopodeseresttica(isto,especificadaemtempode
compilao)oudinmica(emtempodeexecuo).

Abstract Factory
Inteno
Fornecerumainterfaceparacriaodefamliasdeobjetosrelacionadosoudependentes
semespecificarsuasclassesconcretas.TambmconhecidocomoKit.[3]
Motivao
Estepadrodeveseraplicadoquandosedesejaisolaraaplicaodaimplementaoda
classeconcreta,quepoderiaserumcomponenteeouframeworkespecficonoquala
aplicaoconheceriaapenasumainterfaceeaimplementaoconcretaseriaconhecida
apenasemtempodeexecuooucompilao.
Imaginequeemumaaplicaohouvesseanecessidadedequeelafosseimplementada
paraoferecersuporteaplataformasecaractersticasdistintas.Porexemplo:Umaviso
desktopeumamvel(celularPocketPC).Amaneiradeconstitula,seriadefinindouma
famliadecomponentesparacadaplataformaeumafbricaqueosinstanciadeacordocom
aplataformaalvonaqualaaplicaoestarsendoexecutada.

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

11/23

22/09/2016

ConheaosPadresdeProjeto

Figura1

Aplicabilidade
Deacordocomoexpostopelosquatroamigos,ousodopadroAbstractFactorydeveestar
restritoasseguintessituaes:
Umsistemadeveserindependentedecomoseusprodutossocriados,compostosou
representados
Umsistemadeveserconfiguradocomoumprodutodeumafamliademltiplos
produtos
Umafamliadeobjetosforprojetadaparaserusadaemconjunto,evocnecessita
garantirestarestrio
Vocquerfornecerumabibliotecadeclassesdeprodutosequerrevelarsomentesuas
interfaces,nosuasimplementaes.
Estrutura
AestruturaarquiteturaldopadrodefinidosegundoGoFdeacordocomoapresentadona
Figura1.Aestruturadeumexemplomaisdeacordocomarealidadedodesenvolvedor
apresentadanaFigura2.Aidiabsicaapresentadapelafiguraadeofereceraousurio
(desenvolvedor)apossibilidadedeexecutarumaaplicaosobrediferentesplataformas.

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

12/23

22/09/2016

ConheaosPadresdeProjeto

Figura2

Participantes
ComponentFactorydeclaraumainterfaceparaoperaesquecriamobjetosdos
componentesutilizadosnaaplicao
PocketFactoryclasseconcretaqueimplementaasoperaesquecriamosobjetos
noformatododispositivocliente
PCFactoryclasseconcretaqueimplementaasoperaesresponsveisporcriaros
objetosnoformatodoPC.
Conseqncias
OpadroAbstractFactorypossuiosseguintesbenefciosedesvantagens:
Eleisolaasclassesconcretas.
Eletornafcilatrocadefamliasdeprodutos.
Elapromoveaharmoniaentreprodutos.
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

13/23

22/09/2016

ConheaosPadresdeProjeto

difcildesuportarnovostiposdeprodutos.

Factory Method
Inteno
Definirumainterfaceparacriarobjetos,masdeixarqueassubclassesdecidemqueclasse
instanciar.OFactoryMethod,tambmconhecidocomoconstrutorvirtual,possibilitaadiara
criaodoobjetoasubclasses[3].
Motivao
Essepadrocomumenteutilizadopelosprojetistasdesoftwarequandoexistea
necessidadedeencapsularacriaodeumaclasseseisolandodoconhecimentodaclasse
concretadaaplicaoclienteatravsdeumainterface.Essanecessidadecomumente
desejadaporaquelesquetrabalhamnodesenvolvimentodeframeworks,queutilizam
classesabstratasparadefiniremanterrelacionamentosentreosobjetos.Dessaformaos
clientesimplementamasfuncionalidadesesperadaspeloframeworkadicionandoalgicade
negcioespecficadaaplicao,semqueoframeworktenhaoconhecimentodecomoe
qualalgicaimplementadapelaaplicaoparacomplementalo.
Umexemplodeutilizaodopadropodesernaconstruodeaplicaesquetenhaque
darsuporteadiferentesimplementaesdepersistnciacomomnimoderetrabalho.
Aplicabilidade
AutilizaodopadroFactoryMethodpodeestarcondicionadaquando:
1.Umaclassenopodeanteciparaclasse/tipodeobjetosquedevemcriar
2.Umaclasseespecifiquequesuassubclassestenhamoconhecimentodosobjetosque
criam
3.Classesquedelegamresponsabilidadeparaumadentrevriassubclassesauxiliares,e
vocquerobteroconhecimentodequalsubclasseauxiliarqueadelegada.
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

14/23

22/09/2016

ConheaosPadresdeProjeto

Estrutura

Figura3

Participantes
Productdefineainterfacedeobjetosquedeversercriadopelomtodofbrica
ConcreteProductimplementaodainterfaceProduct
CreatordeclaraomtodofbricaoqualretornaumobjetodotipoProduct
ConcreteCreatorredefine(override)omtodofbricaqueretornaumainstncia
concretadainterfaceProduct.
Conseqncias
OpadroFactoryMethodeliminaanecessidadedeanexarclassesespecficasdas
aplicaesnocdigo.OcdigolidasomentecomainterfacedeProductportantoelepode
trabalharcomqualquerimplementaodaclassequeimplementaProduct,definidapelo
usurio.

Singleton
Inteno
Garantirqueumobjetoterapenasumanicainstncia,isto,queumaclasseirgerar
apenasumobjetoequeesteestardisponveldeformanicaparatodooescopodeuma
aplicao[3].
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

15/23

22/09/2016

ConheaosPadresdeProjeto

Motivao
Algumasaplicaestmanecessidadedecontrolaronmerodeinstnciascriadasde
algumasclasses,sejapelanecessidadedaprprialgicaoupormotivosdeperformancee
economiaderecursos.
Imagineomomentoemqueumaaplicaoqueexistasimultaneamentenumdispositivo
mvel(PocketPC,Celular,Palm)enumambientecorporativo,necessitedeumprocessode
sincronizaoentreasinformaesprocessadasnodispositivomvelenabasecorporativa.
Ambasaplicaesdeveriamsecomunicarcomumobjetoquedeveriasernicopara
processarestesincronismo,afimdeevitarapossibilidadedecriardadosnabase.

Figura4

Aplicabilidade
OusodopadroSingletonestcondicionadoa:
Quandofornecessriomanternumsistema,sejaeledistribudoouno,apenasuma
instnciadeobjetoequeopontodeacessoparaestesejabemconhecido(Ex.objeto
responsvelporumpooldeimpressonumarede,gerenciadordejanelas)
Quandoanicainstnciativerdeserextensvelatravsdesubclasses,possibilitando
aosclientesusaremumainstnciaestendidasemalteraroseucdigo(vises
polimrficas).
OdesenvolvedoresDelphijutilizamocomportamentodopadroSingletonemsuas
aplicaes,quandodeclaramvariveisglobaisnareadeinicializaodoprojetoedepois
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

16/23

22/09/2016

ConheaosPadresdeProjeto

reutilizamainstnciadosobjetos.TApplication,TCiipBoardsoexemplosdeobjetosque
noteriamsentidoexistirmaisdeumainstncianaaplicaoeporissoassumemo
comportamentodopadroSingleton.
Estrutura

Figura5

Participantes
1.Singletondefineummtodoestticoquepermiteaosclientesobteremoobjetonico.
Eletambmserresponsvelpeloprocessodecriaodoobjeto.
Conseqncias
Osbenefciosqueopadroapresentaso:
Acessocontroladoainstncianica
Espaodenomesreduzido(diganoaproliferaodevariveisglobais)
Permiteumrefinamentodeoperaeserepresentaes
PermiteumnmerovariveldeinstnciasOpadropossibilitaquesejaadotadaa
estratgicadecriarmaisdeumainstnciadaclasse,deformacontrolada
Maisflexveldoqueasoperaesdeclasse

Padres estruturais
Ospadresestruturaissepreocupamcomaformacomoclasseseobjetossocompostos
paraformarestruturasmaiores.Osdeclassesutilizamaheranaparacomporinterfacesou
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

17/23

22/09/2016

ConheaosPadresdeProjeto

implementaes,eosdeobjetoaoinvsdecomporinterfacesouimplementaes,eles
descrevemmaneirasdecomporobjetosparaobternovasfuncionalidades.Aflexibilidade
obtidapelacomposiodeobjetosprovmdacapacidadedemudaracomposioemtempo
deexecuooquenopossvelcomacomposioesttica(heranadeclasses).

Adapter
Inteno
Converterainterfacedeumaclasseporoutraesperadapelosclientes[3].Oquepossibilita
queclassescominterfacesincompatveistrabalhememconjuntoouque,deoutraforma,
seriaimpossvel.TambmconhecidocomoWrapper(adaptador).
Motivao
Algumasvezes,umaclassedeumtoolkit,projetadaparaserreutilizadanocondizcoma
interfaceespecficadeumdomniorequeridaporumaaplicao.
Aplicabilidade
Ousodopadroestcondicionadoa:
1.Usarumaclasseexistente,massuainterfacenocorrespondeinterfacerequerida
2.Criarclassesreutilizveisquecooperamcomclassesnorelacionadasouno
previstas,ouseja,classescominterfaceinicialmenteincompatvel.
Estrutura
NaFigura3apresentadaaestruturadopadrobaseadonaherana,enafigura4a
baseadanacomposiodeobjetos.
Participantes
1.Target(Alvo)defineainterfaceespecficadodomniodocliente
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

18/23

22/09/2016

ConheaosPadresdeProjeto

2.Client(cliente)colaboracomobjetoscompatveiscomTarget
3.Adaptee(Adaptao)interfaceexistentedenecessitadeadaptao
4.Adapter(Adaptador)adaptaainterfaceAdapteeinterfaceTarget.
Conseqncias
Paraadaptaesdeclasses:
DEVMEDIA

BaixeoAPP

Login

Umadaptadordeclassenofuncionarquandoquisermosadaptarumaclasseetodas
assuassubclasses
PermiteaAdaptersubstituiralgumcomportamentodeAdaptee,jqueAdapteruma
subclasse.
Paraadaptaesdeobjetos:
PermiteaumnicoAdapteradaptarumAdapteeesuassubclasses
TornamaisdifcilredefinirocomportamentodeumAdaptee.Conseguidoatravsde
umasubclassedeAdapteequereferenciadaporAdapter.

Padres de comportamento
Ospadresdecomportamentoseconcentramnosalgoritmoseatribuiesde
responsabilidadesentreosobjetos.Elesnodescrevemapenaspadresdeobjetosoude
classes,mastambmospadresdecomunicaoentreosobjetos.
Ospadrescomportamentaisdeclassesutilizamaheranaparadistribuirocomportamento
entreclasses,eospadresdecomportamentodeobjetoutilizamacomposiodeobjetos
emcontrapartidaaherana.Algunsdescrevemcomogruposdeobjetoscooperamparaa
execuodeumatarefaquenopoderiaserexecutadaporumobjetosozinho.

Template Method
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

19/23

22/09/2016

ConheaosPadresdeProjeto

Inteno
Definiroesqueletodeumalgoritmoemumaoperao,postergando(deferring)alguns
passosparasubclasses.TemplateMethod(gabaritodemtodo)permitequesubclasses
redefinamcertospassosdeumalgoritmosemmudaraestruturadomesmo.[3]
Motivao
DEVMEDIA

BaixeoAPP

Login

Imaginequevoctenhadeconstruirumaaplicaoquepossuiumadeterminadafunoda
qualsdeconhecimentooalgoritmodeexecuo,eotrabalhodecodificaopara
realizaodaoperaopossaserpostergado.
Aplicabilidade
Paraimplementaraspartesinvariantesdeumalgoritmoedeixarparasubclassesa
implementaodapartevariante
Parafatorarocomportamentosemelhanteentresubclassesnumasuperclasse
evitandoseassimaduplicaodecdigo
Paracontrolarextensesdeclassescommtodos"gancho"
Estrutura

Figura6

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

20/23

22/09/2016

ConheaosPadresdeProjeto

Participantes
AbstractClassdefineasoperaesprimitivaseabstratasquerepresentamospassos
deumalgoritmoeimplementaummtodoqueinvocaestasoperaesprimitivas
ConcreteClassimplementaasoperaesespecficasdefinidasnasuperclassecomo
cdigoespecfico.
DEVMEDIA
Conseqncias

BaixeoAPP

Login

Osmtodostemplatesoumatcnicafundamentalparaareutilizaodecdigo.Eles
conduzemaumaestruturadeinversodecontroleeminglsInversionofControlIoCou
princpiodadependnciainversa,comumenteconhecidacomooprincpiodeHollywood,
ouseja:nonoschame,nschamaremosvoc.Istoserefereacomoumaclasseme
chamaasoperaesdeumasubclasse,enoocontrrio.

Concluses
Ousodepadresdeprojetopropiciaaconstruodeaplicaeseouestruturasdecdigo
deformaflexveleadocumentaodesoluesreaproveitveis.Atravsdospadresde
projetopossvelidentificarospontoscomunsentreduassoluesdiferentesparaum
mesmoproblema.Conheceressespontoscomunsnospermitedesenvolversoluescada
vezmelhoresemaiseficientesquepodemserreutilizadas,permitindo,assim,oavanodo
conhecimentohumano.
Ospadrespossibilitamatravsdeumalinguagemclaraeconcisa,queosprojetistas
experientestransfiramosseusconhecimentosaosmaisnovosemumaltonvelde
abstraoeassimfacilitamodesenvolvimentoeoreaproveitamentodecdigo.

Referncias
PAGEJONES,Meilir.FundamentosdodesenhoorientadoaobjetocomUML.2
ed.SoPaulo:MakronBooks,2001.
http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

21/23

22/09/2016

ConheaosPadresdeProjeto

HEYWORTH,James,IntroductiontoDesignPatternsinDelphi.ltimavisitaem:08de
fevereirode2005.
GAMMA,Erich,HELM,RichardJOHNSON,Ralph,VLISSIDES,John.Padresde
Projeto:soluesreutilizveisdesoftwareorientadoaobjetos.1.ed.PortoAlegre:
Bookman,2000.
KOENIG,Andrew.AntiPatterns.ltimavisitaem08defevereirode2005.
BaixeoAPP
Login
DEVMEDIA
ALEXANDER,Christopher,etal.APatternLanguage.OxfordUniversityPress,New

York,1977
PublicadonoCanalDelphi

porAlessandroFerreira
Delphinaveia(!)

Ajudenosaevoluir:vocgostoudopost?

(20) (0)

Compartilhe:

Ficoucomalgumadvida?
Postaquisuadvidaoucomentrioquenossaequiperesponderomaisrpido
possvel.

Maisposts
Revista

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

22/23

22/09/2016

ConheaosPadresdeProjeto

Revista ClubeDelphi 168


Artigo

Construindo servios RESTful com DataSnap


Artigo

Aprendizagem de mquina com Intelligence Lab


Artigo

DEVMEDIA

Testes Unitrios com DUnitX

BaixeoAPP

Login

Artigo

ListBox e ListView: Listagem de dados em aplicaes mobile


Listar mais contedo

Publique | Assine | Faleconosco

DevMedia
CurtirPgina

122milcurtidas

1amigocurtiuisso

HospedagemwebporPorta80WebHosting

http://www.devmedia.com.br/conhecaospadroesdeprojeto/957

23/23

Você também pode gostar