padrões de projeto - observer e strategy
TRANSCRIPT
![Page 1: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/1.jpg)
Padrões de ProjetoObserver e Strategy
João Carlos Ottobboni
![Page 2: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/2.jpg)
Observer
![Page 3: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/3.jpg)
Padrão Observer
Objetivo:* Tem responsabilidade de propagar atualizações;
![Page 4: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/4.jpg)
Padrão Observer
Objetivo:* Tem responsabilidade de propagar atualizações;
* Define dependência de um para muitos;
![Page 5: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/5.jpg)
Padrão Observer
Objetivo:* Tem responsabilidade de propagar atualizações;
* Define dependência de um para muitos;
* Garante que quando o objeto observado muda de estado todos
os observadores são atualizados automaticamente.
![Page 6: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/6.jpg)
Padrão Observer
Funcionamento:* É necessário construção de uma classe SUBJECT, que é
responsável por atualizar seus dependentes;
![Page 7: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/7.jpg)
Padrão Observer
Funcionamento:* É necessário construção de uma classe SUBJECT, que é
responsável por atualizar seus dependentes;
* É preciso uma interface chamada OBSERVER, responsável por
observar a classe SUBJECT;
![Page 8: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/8.jpg)
Padrão Observer
Funcionamento:* É necessário construção de uma classe SUBJECT, que é
responsável por atualizar seus dependentes;
* É preciso uma interface chamada OBSERVER, responsável por
observar a classe SUBJECT;
* Um SUBJECT pode possuir vários OBSERVERs;
![Page 9: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/9.jpg)
Padrão Observer
Definição do problema:* Quando uma modificação em um objeto requer a modificação em
vários outros.
![Page 10: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/10.jpg)
Padrão Observer
Definição do problema:* Quando uma modificação em um objeto requer a modificação em
vários outros.
* Quando um objeto precisa notificar vários outros sem saber
quais são eles. Criando um baixo acoplamento.
![Page 11: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/11.jpg)
Padrão Observer
Exemplos de Uso:* Uma empresa de mineração com vários funcionários;
![Page 12: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/12.jpg)
Padrão Observer
Exemplos de Uso:* Uma empresa de mineração com vários funcionários;
* Uma sirene toca informando sobre mudança de estado;
![Page 13: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/13.jpg)
Padrão Observer
Exemplos de Uso:* Uma empresa de mineração com vários funcionários;
* Uma sirene toca informando sobre mudança de estado;
* O alarme da sirene é uma mensagem enviada aos observadores
(funcionários), que pode ser uma troca de turno, detonações ou inicio de
funcionamento;
![Page 14: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/14.jpg)
Padrão Observer
Exemplos de Uso:
![Page 15: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/15.jpg)
Padrão Observer
Exemplos de Uso:
![Page 16: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/16.jpg)
Padrão Observer
Vantagens:* Permite adicionar OBSERVERs sem modificar a classe
SUBJECT;
![Page 17: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/17.jpg)
Padrão Observer
Vantagens:* Permite adicionar OBSERVERs sem modificar a classe
SUBJECT;
* Baixo acoplamento entre OBSERVER e SUBJECT;
![Page 18: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/18.jpg)
Padrão Observer
Vantagens:* Permite adicionar OBSERVERs sem modificar a classe
SUBJECT;
* Baixo acoplamento entre OBSERVER e SUBJECT;
* OBSERVER tem autonomia de considerar ou ignorar uma
atualização do SUBJECT;
![Page 19: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/19.jpg)
Padrão Observer
Vantagens:* Permite adicionar OBSERVERs sem modificar a classe
SUBJECT;
* Baixo acoplamento entre OBSERVER e SUBJECT;
* OBSERVER tem autonomia de considerar ou ignorar uma
atualização do SUBJECT;
* Facilita modularidade do projeto.
![Page 20: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/20.jpg)
Padrão Observer
Desvantagens:* O uso excessivo do padrão pode causar sério impacto na
performance;
![Page 21: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/21.jpg)
Padrão Observer
Desvantagens:* O uso excessivo do padrão pode causar sério impacto na
performance;
* Sistemas onde todos notificam todos ficam inundados de
notificações;
![Page 22: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/22.jpg)
Strategy
![Page 23: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/23.jpg)
Padrão Strategy
Objetivo:
* Serve para definir e encapsular o algorítimo em
um objeto;
![Page 24: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/24.jpg)
Padrão Strategy
Objetivo:
* Serve para definir e encapsular o algorítimo em
um objeto;
* Fornece interfaces suficientes para suportar
uma variedade de algoritmos;
![Page 25: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/25.jpg)
Padrão Strategy
Funcionamento:
![Page 26: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/26.jpg)
Padrão Strategy
Funcionamento:
● Strategy - Interface comum para todas as classes(variações
concretas) que definem os diversos comportamentos esperados;
● ConcreteStrategy - Classes que implementam os diversos
comportamentos que devem atender a cada contexto;
● Context - Classe onde os objetos ConcreteStrategy serão
instanciados;
As classes context instanciam os objetos strategy e invocam o método
AlgorithInterface passando os parâmetros solicitados, então a interface
strategy decide qual das implementações ConcretyStrategy deve atender
a chamada.
![Page 27: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/27.jpg)
Padrão Strategy
Definição do problema:* Quando se tem um método que e aplicado em diferentes
situações nas quais e exigido um comportamento especifico;
![Page 28: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/28.jpg)
Padrão Strategy
Definição do problema:* Quando se tem um método que e aplicado em diferentes
situações nas quais e exigido um comportamento especifico;
* Quando se tem uma família de classes com estruturas parecidas
mais que se diferem no seu comportamento;
![Page 29: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/29.jpg)
Padrão Strategy
Definição do problema:* Quando se tem um método que e aplicado em diferentes
situações nas quais e exigido um comportamento especifico;
* Quando se tem uma família de classes com estruturas parecidas
mais que se diferem no seu comportamento;
* Quando se tem uma classe com muitos métodos complexos e
muitos comandos condicionais (if/else);
![Page 30: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/30.jpg)
Padrão Strategy
Definição do problema:* Quando se tem um método que e aplicado em diferentes
situações nas quais e exigido um comportamento especifico;
* Quando se tem uma família de classes com estruturas parecidas
mais que se diferem no seu comportamento;
* Quando se tem uma classe com muitos métodos complexos e
muitos comandos condicionais (if/else);
* Quando se tem um algorítimo complexo que utiliza uma estrutura
de dados que não precisa ser conhecida por quem vai utiliza-lo;
![Page 31: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/31.jpg)
Padrão Strategy
Definição do problema:* Quando se tem um método que e aplicado em diferentes
situações nas quais e exigido um comportamento especifico;
* Quando se tem uma família de classes com estruturas parecidas
mais que se diferem no seu comportamento;
* Quando se tem uma classe com muitos métodos complexos e
muitos comandos condicionais (if/else);
* Quando se tem um algorítimo complexo que utiliza uma estrutura
de dados que não precisa ser conhecida por quem vai utiliza-lo;
* Quando se tem operações comuns a uma serie de objetos de
classes diferente que contem pequenas variações;
![Page 32: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/32.jpg)
Padrão Strategy
Exemplo de Uso:* Uma empresa da área de telecomunicações possui uma intranet de atendimento para todo o
Brasil e teve num dos seus módulos internos
![Page 33: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/33.jpg)
Padrão Strategy
Exemplo de Uso:* Uma empresa da área de telecomunicações possui uma intranet de atendimento para todo o
Brasil e teve num dos seus módulos internos
* A intranet de atendimento dessa grande empresa de telecomunicações possui todo o
gerenciamento interno da empresa,
![Page 34: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/34.jpg)
Padrão Strategy
Exemplo de Uso:* Uma empresa da área de telecomunicações possui uma intranet de atendimento para todo o
Brasil e teve num dos seus módulos internos
* A intranet de atendimento dessa grande empresa de telecomunicações possui todo o
gerenciamento interno da empresa,
* Funcionários que prestam atendimentos em CallCenters, Ilhas e Segmentos - Para cada tipo
de atendente o sistema configura os parâmetros necessários para um atendente específico
![Page 35: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/35.jpg)
Padrão Strategy
Exemplo de Uso:* Uma empresa da área de telecomunicações possui uma intranet de atendimento para todo o
Brasil e teve num dos seus módulos internos
* A intranet de atendimento dessa grande empresa de telecomunicações possui todo o
gerenciamento interno da empresa,
* Funcionários que prestam atendimentos em CallCenters, Ilhas e Segmentos - Para cada tipo
de atendente o sistema configura os parâmetros necessários para um atendente específico
* Esses requisitos contém muitos estados, portanto indica à necessidade de aplicar o padrão
Strategy.
![Page 36: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/36.jpg)
Padrão Strategy
Exemplo de Uso:* Uma empresa da área de telecomunicações possui uma intranet de atendimento para todo o
Brasil e teve num dos seus módulos internos
* A intranet de atendimento dessa grande empresa de telecomunicações possui todo o
gerenciamento interno da empresa,
* Funcionários que prestam atendimentos em CallCenters, Ilhas e Segmentos - Para cada tipo
de atendente o sistema configura os parâmetros necessários para um atendente específico
* Esses requisitos contém muitos estados, portanto indica à necessidade de aplicar o padrão
Strategy.
* Para atendente deve se a configuração para o atendente de um Call Center onde configura-
se tudo que esse atendente precisa
![Page 37: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/37.jpg)
Padrão Strategy - Exemplo de Uso
![Page 38: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/38.jpg)
Padrão Strategy - Exemplo de Uso
![Page 39: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/39.jpg)
Padrão Strategy
Vantagens:* Facilita a troca e a escolha entre algoritmos utilizando uma
mesma função;
![Page 40: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/40.jpg)
Padrão Strategy
Vantagens:* Facilita a troca e a escolha entre algoritmos utilizando uma
mesma função;
* Mais facilidade ao inserir um comportamento especifico sem ter
que recodificar grandes partes da aplicação;
![Page 41: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/41.jpg)
Padrão Strategy
Vantagens:* Facilita a troca e a escolha entre algoritmos utilizando uma
mesma função;
* Mais facilidade ao inserir um comportamento especifico sem ter
que recodificar grandes partes da aplicação;
* Manutenção fica mais fácil;
![Page 42: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/42.jpg)
Padrão Strategy
Vantagens:* Facilita a troca e a escolha entre algoritmos utilizando uma
mesma função;
* Mais facilidade ao inserir um comportamento especifico sem ter
que recodificar grandes partes da aplicação;
* Manutenção fica mais fácil;
* Permite um algoritmo ter muitas variações de um
comportamento;
![Page 43: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/43.jpg)
Padrão Strategy
Vantagens:* Facilita a troca e a escolha entre algoritmos utilizando uma
mesma função;
* Mais facilidade ao inserir um comportamento especifico sem ter
que recodificar grandes partes da aplicação;
* Manutenção fica mais fácil;
* Permite um algoritmo ter muitas variações de um
comportamento;
* Possibilita escolher entre um algoritmo ou outro em tempo de
execução.
![Page 44: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/44.jpg)
Padrão Strategy
Desvantagens:
* Algorítimos vão receber dados das suas classes de
contexto e o custo da comunicação entre o contexto e a
estrategia pode vir a ser muito grande;
![Page 45: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/45.jpg)
Padrão Strategy
Desvantagens:
* Algorítimos vão receber dados das suas classes de
contexto e o custo da comunicação entre o contexto e a
estrategia pode vir a ser muito grande;
* Em certos casos contexto ira inicializar e carregar
parâmetros que nunca serão usados;
![Page 46: Padrões de Projeto - Observer e Strategy](https://reader031.vdocuments.net/reader031/viewer/2022020116/55ab134d1a28ab39698b489a/html5/thumbnails/46.jpg)
Padrão Strategy
Desvantagens:
* Algorítimos vão receber dados das suas classes de
contexto e o custo da comunicação entre o contexto e a
estrategia pode vir a ser muito grande;
* Em certos casos contexto ira inicializar e carregar
parâmetros que nunca serão usados;
* Dificuldade em utilizar corretamente o padrão.