Padrões de Projeto - Observer e Strategy

46
Padrões de Projeto Observer e Strategy João Carlos Ottobboni

Transcript of Padrões de Projeto - Observer e Strategy

Page 1: Padrões de Projeto - Observer e Strategy

Padrões de ProjetoObserver e Strategy

João Carlos Ottobboni

Page 2: Padrões de Projeto - Observer e Strategy

Observer

Page 3: Padrões de Projeto - Observer e Strategy

Padrão Observer

Objetivo:* Tem responsabilidade de propagar atualizações;

Page 4: Padrões de Projeto - Observer e Strategy

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

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

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

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

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

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

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

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

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

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

Padrão Observer

Exemplos de Uso:

Page 15: Padrões de Projeto - Observer e Strategy

Padrão Observer

Exemplos de Uso:

Page 16: Padrões de Projeto - Observer e Strategy

Padrão Observer

Vantagens:* Permite adicionar OBSERVERs sem modificar a classe

SUBJECT;

Page 17: Padrões de Projeto - Observer e Strategy

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

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

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

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

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

Strategy

Page 23: Padrões de Projeto - Observer e Strategy

Padrão Strategy

Objetivo:

* Serve para definir e encapsular o algorítimo em

um objeto;

Page 24: Padrões de Projeto - Observer e Strategy

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

Padrão Strategy

Funcionamento:

Page 26: Padrões de Projeto - Observer e Strategy

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

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

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

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

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

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

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

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

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

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

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

Padrão Strategy - Exemplo de Uso

Page 38: Padrões de Projeto - Observer e Strategy

Padrão Strategy - Exemplo de Uso

Page 39: Padrões de Projeto - Observer e Strategy

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

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

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

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

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

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

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

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.