Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Padres de Projetos
PINHEIRO, lvaro Farias
Autor
I
Srie Fundamentos da Engenharia de Software
Padres de Projetos
Publicao 2017
O autor acredita que todas as informaes aqui apresentadas esto corretas e podem ser
utilizadas para qualquer fim legal. Entretanto, no existe qualquer garantia explcita ou implcita,
de que o uso de tais informaes conduzir sempre ao resultado desejado. Os nomes de sites e
empresas, por ventura, mencionados, foram utilizados apenas para ilustrar os exemplos, no
tendo vnculo nenhum com o livro, no garantindo a sua existncia nem divulgao. Eventuais
erratas estaro disponveis para download no site de publicao.
Dados da Publicao
1. GoF Criacional
2. GoF Estrutural
3. GoF Comportamental
II
Srie Fundamentos da Engenharia de Software
Padres de Projetos
Publicao Independente
Revista em portugus com o ttulo
Padres de Projetos
Srie Fundamentos da Engenharia de Software
Ano II Nmero 2
Recife Pernambuco Brasil
Fevereiro de 2017
III
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
Introduo
http://www.alvarofpinheiro.eti.br/ Pgina 1
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
http://www.alvarofpinheiro.eti.br/ Pgina 2
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
http://www.alvarofpinheiro.eti.br/ Pgina 3
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
classe utiliza herana para variar a classe que ser instanciada. Um padro
criacional de objeto ir delegar a instanciao de um objeto para outro objeto.
Padres criacionais tornam-se importantes medida que os sistemas evoluem
e passam a depender mais de composio de objetos do que de herana de
classes. medida que isto acontece, a nfase migra da codificao de um
conjunto de comportamentos para a codificao de conjuntos menores de
comportamento, que podem ser combinados em vrios conjuntos mais
complexos.
1.4.2 Builder
http://www.alvarofpinheiro.eti.br/ Pgina 4
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
Aplicabilidade: Este padro deve ser utilizado quando uma classe no pode
antecipar a classe dos objetos que deve criar. Ou quando a classe deseja que
suas subclasses especifiquem o objeto que ser criado. O quando a classe
delega a responsabilidade de criao para um de muitas classes auxiliares, e
deseja-se localizar o conhecimento de que classe auxiliar deve ser delegada.
1.4.4 Prototype
Aplicabilidade: Este padro deve ser utilizado quando a aplicao deve ser
independente de como os produtos so criados, compostos, e representados,
e, adicionalmente: As classes a serem instanciadas so definidas em tempo
de execuo (por exemplo, dynamic loading); Deseja-se evitar criar uma
hierarquia de fbricas paralelas a hierarquia de classes; Quando a
instanciao da classe pode ter um de algumas poucas combinaes
diferentes de estado. Isto pode ser mais conveniente criar um nmero
correspondente de prottipos e clon-los ao invs de instanciar a classe
manualmente a cada vez com o estado apropriado.
http://www.alvarofpinheiro.eti.br/ Pgina 5
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.4.5 Singleton
Inteno: Garantir que uma classe possui apenas uma nica instncia. Prov
um ponto de acesso global a ela.
Aplicabilidade: Este padro de ser utilizado quando deve haver apenas uma
instncia de cada classe e esta instncia deve ser acessvel a todos os
clientes a partir de um ponto de acesso conhecido. Ou quando uma nica
instncia deve ser extensvel apenas por subclasses, e os clientes devem
apenas utilizar a instncia estendida, sem modificar seu cdigo.
1.5.1 Adapter
Aplicabilidade: Este padro deve ser utilizado quanto se deseja utilizar uma
classe j existente, e sua interface no atende a interface que voc precisa.
Quando se deseja criar uma classe reusvel que coopera com classes ainda
no conhecidas ou no criadas, ou seja, classes que no necessariamente
possui interfaces compatveis. Necessita-se usar diversas subclasses j
existentes, mas impraticvel adaptar suas interfaces atravs da criao de
subclasses para cada uma delas. Um objeto adaptador pode adaptar a
interface da superclasse.
http://www.alvarofpinheiro.eti.br/ Pgina 6
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.5.2 Bridge
1.5.3 Composite
http://www.alvarofpinheiro.eti.br/ Pgina 7
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.5.4 Decorator
1.5.5 Facade
http://www.alvarofpinheiro.eti.br/ Pgina 8
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.5.6 Flyweight
Aplicabilidade: Este padro deve ser utilizado quando: Uma aplicao utiliza
um grande nmero de objetos; Armazenamento tem custo elevado devido
grande quantidade de objetos; Muitos grupos de objeto podem ser substitudos
por relativamente poucos objetos compartilhados. A aplicao no depende da
identidade do objeto. Uma vez que os objetos podem ser compartilhados,
testes de identidade iro retornar true para objetos conceitualmente distintos.
1.5.7 Proxy
http://www.alvarofpinheiro.eti.br/ Pgina 9
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
Aplicabilidade: Este padro deve ser usado quando: mais de um objeto pode
tratar uma solicitao e o objeto que a tratar no conhecido a priori. O
objeto que trata a solicitao deve ser escolhido automaticamente; deve-se
emitir uma solicitao para um dentre vrios objetos, sem especificar
explicitamente o receptor; o conjunto de objetos que pode tratar uma
solicitao deveria ser especificado dinamicamente.
http://www.alvarofpinheiro.eti.br/ Pgina 10
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.6.3 Command
http://www.alvarofpinheiro.eti.br/ Pgina 11
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.6.4 Strategy
1.6.5 State
http://www.alvarofpinheiro.eti.br/ Pgina 12
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.6.6 Observer
1.6.7 Interpreter
Aplicabilidade: Este padro deve ser utilizado quando existe uma linguagem a
ser interpretada e possvel representar expresses nesta linguagem como
rvores sintticas abstratas. Esse padro funciona melhor quando: A
gramtica simples. Para gramticas complexas, a hierarquia de classes se
torna muito grande e no gerencivel. Outras ferramentas como geradores de
parsers so melhores alternativas nestas situaes, pois podem interpretar
expresses sem construir rvores sintticas abstradas, o que pode salvar
espao e possivelmente tempo; Eficincia no crtico. Os interpretadores
mais eficientes so usualmente no implementados atravs da interpretao
de rvores de parser diretamente, mas primeiro feita uma traduo para um
outro formato.
http://www.alvarofpinheiro.eti.br/ Pgina 13
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.6.8 Memento
1.6.9 Mediator
1.6.10 Visitor
http://www.alvarofpinheiro.eti.br/ Pgina 14
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
1.6.11 Iterator
http://www.alvarofpinheiro.eti.br/ Pgina 15
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
http://www.alvarofpinheiro.eti.br/ Pgina 16
Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF
http://www.alvarofpinheiro.eti.br/ Pgina 17