Design patterns
-
Upload
vinicius-krolow -
Category
Technology
-
view
1.095 -
download
1
description
Transcript of Design patterns
Design Patterns
O que são e quando devem ser usados?
Vinícius Krolow@krolowhttp://github.com/krolow
Lucas Teixeirahttp://github.com/loteixeira
photoshop, grids, cores, arquitetura, urbanismo, desenho, isso é outra coisa...
NÃO é sobre design
é SIM sobre o seu código
problemas
escreveré sobre como
resolvercomuns
seu código para
conte me mais sobre isso...
vamos ter uma "SmallTalk"
Gang of four
é tudo sobre OOP
encapsulation, polymorphism, decouple, são palavras comuns quando se fala em design patterns
é comum entre diferentes linguagens para resolver os mesmos problemas
é uma linguagem comum entre programadores
let's take a look how they are organized...
vamos ver como são organizados
Padrões Criacionais
Abstract FactoryBuilderFactory MethodLazy InitializationMultitonObject PoolPrototypeSingletonResource acquisition is initialization
Padrões Estruturais
AdapterCompositeBridgeDecoratorFacadeFlyweightFront ControllerModuleProxy
Padrões Comportamentais
Chain of responsibilityCommandInterpreterIteratorMediatorMementoNull objectObserverServantSpecificationStateStrategyTemplate MethodVisitor
Padrões Concorrentes
Active ObjectBalkingBinding propertiesDouble-checked lockingEvent-based asynchronousGuarded suspensionLockMessaging design pattern (MDP)Monitor objectReactorRead-write lockSchedulerThread poolThread-specific storage
mas cada um com um propósito especial
existem vários design patterns
vamos para ação
Observer
"O padrão Observer define uma dependência de um-para-muitos entre objetos, onde os observadores serão notificados sobre mudanças no estado interno do objeto central."
show me CODE
Resumão
● Acoplamento fraco;
● Possui implementação nativa em várias linguagens modernas;
● Normalmente usado com o padrão MVC para a comunicação entre suas camadas;
● Auxilia na comunicação de objetos distantes;
● É Async provavelmente tem ele!
Adapter
"O padrão Adapter (também chamado de Wrapper), é usado para conectar diferentes interfaces de forma consistente. Ele provê uma interface compatível com o código-cliente usando internamente a interface original."
show me CODE
Resumão
● Mesmo princípio dos adaptadores de tomadas elétricas;
● É uma caixa preta capaz processor um input para produzir o output desejado;
● Facilita a conversão de tipos e a integração entre diferentes bibliotecas.
Factory
"O padrão Factory é responsável pela criação de objetos. Ele pode fornecer uma interface para criação de famílias de objetos sem a necessidade de especificar sua classe concreta"
show me CODE
Resumão
● Comum em bibliotecas de GUI - onde todos elementos possuem a mesma interface, embora o comportamento interno seja particular a cada um
● É normal aparecer junto de outros padrões de projeto (strategy, dependency injection, etc)
● Auxilia na implementação de testes automatizados
● É o cara para criar objetos dinâmicamente!
Iterator
"O padrão Iterator permite a iteração entre os elementos de uma coleção qualquer, sem levar em consideração sua implementação e/ou como esses dados são armazenados."
show me CODE
Resumão
● Interface única e simplificada para iterar sobre todos elementos de uma coleção
● A estrutura interna, usada para armazenar os itens da coleção, torna-se irrelevante para o programador-usuário
● Possibilita a criação de Coleção de Objetos ao invês de uso de tipos nativos (array, map);
MVC
"Model-view-controller é um padrão de projeto que visa modularizar o sistema em três partes independentes: model (dados/informação), controller (lógica da aplicação) e view (interação com o usuário)."
show me CODE
Resumão
● Separa as camadas de negócio da sua aplicação;
● Foi idealizado para lidar com pequenas camadas!
● Mal compreendido pela sociedade programadora!
Proxy
"Um proxy, em sua forma mais geral, é uma classe que funciona como uma interface para outra classe. A classe proxy poderia conectar-se a qualquer coisa: uma conexão de rede, um objeto grande em memória, um arquivo, ou algum recurso que é difícil ou impossível de ser duplicado." Wikipédia
show me CODE
Resumão
● LazyLoad é com ele!
● Auxilia acesso remoto de classes;
● Operações custosas, vão começar a custar barato :)
● Null pattern pode ser com ele também!
Singleton
"O Singleton é uma classe de uma instância única com um ponto de acesso global. Seu objetivo é ser um objeto "solitário", independente do ciclo de vida da aplicação."
show me CODE
Resumão
● Não é o mesmo que uma classe com métodos estáticos
● Classe de um único objeto
● Amplamente usada com bibliotecas de logging/debugging
● Controverso, muitas vezes considerado um anti-pattern
● É um inferno para testar!
Dependecy Injection
"O modelo isola a "lógica" (A lógica da aplicação) da interface do usuário (Inserir e exibir dados), permitindo desenvolver, editar e testar separadamente cada parte." Wikipédia
show me CODE
Resumão
● Esse cara sou eu (DI)!
● Chega a nem ser um padrão de tão simples!
● Torna seu código testável e auxilia no desacoplamento do código (avoid no new)
●DIC ajudam na instância de objetos com multiplas depêndecias (aninhados)
●
Tá, chega, cansei de legos...
e o que isso me ajuda no fim?
ma vamo lá, só mais um pouco...
a se tornar um OO star! \m/
com código para orgulhar a família
●
■
●
●
●
●
desacopladotestável
legível
extensível
reutilizável
orientado a
interfaces
mas.... tenha em mente que Design Patternsnão é a RESPOSTA para tudo!
mas que possívelmente alguém já passou pelo mesmo
problema que você
design patterns estão sendo criados todos dias...
Nome: Hack ThursdayExemplo: Apresentação de HojeContexto: Aplicável todas as quintasProblema: Sede de "conhecimento"Solução: Vir todas as quintas
você também pode criar os seus!
"Herança pode ser o câncer do seu código!" by Nós
lembre é Orientação a Objetos não a Classes.
Perguntas e Cerveja?