SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
Singleton | 99
Lista de controle
1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância".
2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe.
3. Fazer "inicialização lenta" (criação na primeira utilização) no acessor3. Fazer "inicialização lenta" (criação na primeira utilização) no acessor
função.
4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.
5. Os clientes só podem utilizar a função de assessor para manipular o5. Os clientes só podem utilizar a função de assessor para manipular o
Singleton.
Regras de ouro
Abstract Factory, Builder, e Prototype pode usar Singleton na sua implementação.
objetos de fachada são frequentemente Singletons porque apenas um objeto Fachada é necessária.
objetos de estado são frequentemente Singletons.
A vantagem de Singleton sobre variáveis ​​globais é que você tem certeza absoluta do
número de casos em que você usar Singleton, e, você pode mudar sua mente e gerenciar
qualquer número de instâncias.
O padrão de design Singleton é um dos padrões mais usados ​​inadequadamente. Singletons se
destinam a ser usadas quando uma classe deve ter exatamente um exemplo, nem mais, nem
menos. Designers utilizam frequentemente Singletons em uma tentativa equivocada de substituir
variáveis ​​globais. A Singleton é, para os efeitos, uma variável global. Será que o Singleton não
acabar com o global, ele simplesmente renomeia.
Quando é Singleton desnecessário? Resposta curta - a maior parte do tempo.Quando é Singleton desnecessário? Resposta curta - a maior parte do tempo.
Resposta longa: quando é mais simples para passar um recurso objeto como uma referência para os objetos
que precisam, em vez de objetos deixando acessar o recurso globalmente.
O problema real com Singletons é que eles dão-lhe uma boa desculpa como não pensar
cuidadosamente sobre a visibilidade apropriada de um
100 | coisa única
objeto. Encontrar o equilíbrio certo de exposição e proteção para um objeto é
fundamental para manter a flexibilidade.
O nosso grupo tinha um mau hábito de usar dados globais, então eu fiz um grupo de estudo sobre Singleton.
A próxima coisa que eu sei Singletons apareceu em todos os lugares e nenhum dos problemas relacionados com
dados globais foi embora.
A resposta à pergunta de dados global não é " Torná-lo um Singleton".A resposta à pergunta de dados global não é " Torná-lo um Singleton".
A resposta é, " Por que diabos você está usando dados global?" Alterar o nome nãoA resposta é, " Por que diabos você está usando dados global?" Alterar o nome nãoA resposta é, " Por que diabos você está usando dados global?" Alterar o nome não
muda o problema.
Na verdade, ele pode torná-lo pior, porque lhe dá a oportunidade de dizer, " Bem, eu não vouNa verdade, ele pode torná-lo pior, porque lhe dá a oportunidade de dizer, " Bem, eu não vou
fazer isso, eu estou fazendo isso" - mesmo que isso e que são a mesma coisa.fazer isso, eu estou fazendo isso" - mesmo que isso e que são a mesma coisa.
Estado | 101
Estado
Intenção
• Permitir que um objecto para alterar o seu comportamento quando as suas mudanças de estado interno. O
objeto aparecerá para mudar sua classe.
• Uma máquina de estado orientado para o objecto
• invólucro + wrappee polimórfica + colaboração
Problema
O comportamento de um objeto monolítico é uma função do seu estado, e deve mudar seu
comportamento em tempo de execução, dependendo esse estado. Ou, um pedido é characterixed por
grandes e numerosos declarações de caso que o fluxo de vector de controlo com base no estado do
pedido.
Discussão
O padrão de Estado é uma solução para o problema de como tornar o comportamento
dependem do estado.
• Definir uma classe "contexto" para apresentar uma interface única para o mundo exterior.
• Definir uma classe base abstrata Estado.
• Representar os diferentes "estados" da máquina estatal como classes derivadas da
classe base Estado.
• Definir o comportamento específico do estado nas classes do Estado derivada apropriadas.
• Manter um ponteiro para o "estado" atual na classe "contexto".
• Para alterar o estado da máquina de estado, alterar o ponteiro atual "estado".
O padrão de Estado não especifica onde as transições de estado será definido. As opções
são duas: o "contexto" objeto, ou cada classe derivada Estado individual. A vantagem da segunda
opção é a facilidade de adicionar novas classes de Estado derivada. A desvantagem é cada
classe Estado derivada tem conhecimento de (acoplamento a) seus irmãos, que introduz as
dependências entre as subclasses.
A abordagem baseada em tabelas para projetar máquinas de estados finitos faz um bom trabalho de
especificar transições de estado, mas é difícil para adicionar ações para acompanhar as transições de estado. A
abordagem baseada em padrões usa código (em vez de estruturas de dados) para especificar transições de
estado, mas ele faz um bom trabalho de ações de transição de estado que acomodam.
Estrutura
A interface do máquina de estado é encapsulado na classe "wrapper". A interface do
hierarquia wrappee espelha a interface do invólucro com a exceção de um parâmetro
adicional.
O parâmetro extra permite que classes wrappee derivado de chamar de volta para a classe
wrapper conforme necessário. Complexidade que de outro modo arrastar para baixo a classe de
invólucro é nitidamente compartimentado e encapsulado numa hierarquia polimórfica para que os
delegados invólucro objeto.
Exemplo
O padrão Estado permite que um objeto para mudar seu comportamento quando seu estado interno
muda.
Este padrão pode ser observado em uma máquina de venda automática. Máquinas de venda
automática tem estados com base no inventário, a quantidade de moeda 102 | Estado
depositada, a capacidade de fazer a mudança, o item selecionado, etc. Quando a moeda é depositado e uma
seleção é feita, uma máquina de venda automática será ou entregar um produto e nenhuma mudança,
entregar um produto e mudança, entregar nenhum produto devido à moeda insuficiente sobre depósito, ou
entregar nenhum produto devido ao esgotamento de estoques.
Lista de controle
1. Identificar uma classe existente ou criar uma nova classe, que servirá como a "máquina de
estado" do ponto de vista do cliente. Essa classe é a classe "wrapper".
2. Crie uma classe base Estado que replica os métodos da interface de máquina de estado.
Cada método recebe um parâmetro adicional: uma instância da classe wrapper. A classe
base Estado especifica qualquer comportamento útil "default".
3. Crie uma classe Estado derivada para cada estado de domínio. Estas classes derivadas única
substituir os métodos que eles precisam para substituir.
4. A classe wrapper mantém uma "corrente" objeto de estado.
5. Todos os pedidos de clientes para a classe de mensagens publicitárias são simplesmente delegado ao objeto
estado atual, e o objeto de invólucro de isto ponteiro é passado.estado atual, e o objeto de invólucro de isto ponteiro é passado.estado atual, e o objeto de invólucro de isto ponteiro é passado.
6. Os métodos estaduais alterar o estado "corrente" no objeto wrapper conforme apropriado.
Estado | 103

Weitere ähnliche Inhalte

Ähnlich wie Padrão Estado explicado com exemplos

2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetosguest9b4c7f
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiagotceufrasio1
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Shared mutability
Shared mutabilityShared mutability
Shared mutabilitydist_bp
 
Diagrama de estados 1
Diagrama de estados 1Diagrama de estados 1
Diagrama de estados 1Maikynata
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 

Ähnlich wie Padrão Estado explicado com exemplos (20)

Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
padrao de projeto3
padrao de projeto3padrao de projeto3
padrao de projeto3
 
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
 
Persistência JPA
Persistência JPAPersistência JPA
Persistência JPA
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiago
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
Shared mutability
Shared mutabilityShared mutability
Shared mutability
 
Prototype
PrototypePrototype
Prototype
 
Diagrama de estados 1
Diagrama de estados 1Diagrama de estados 1
Diagrama de estados 1
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 

Mehr von Walney Negreiros

Mehr von Walney Negreiros (10)

padrao de projeto2
padrao de projeto2padrao de projeto2
padrao de projeto2
 
padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Singleton varianca
Singleton variancaSingleton varianca
Singleton varianca
 
Pleonasmo
PleonasmoPleonasmo
Pleonasmo
 
Anafora
AnaforaAnafora
Anafora
 
Ebep alunos-apresenta~çao
Ebep alunos-apresenta~çaoEbep alunos-apresenta~çao
Ebep alunos-apresenta~çao
 
Problemas de hardware e software
Problemas de hardware e softwareProblemas de hardware e software
Problemas de hardware e software
 
INCAS
INCAS INCAS
INCAS
 

Padrão Estado explicado com exemplos

  • 1. Singleton | 99 Lista de controle 1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância".1. Definir um privado estático atributo na classe "única instância". 2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe.2. Definir um público estático função de acesso na classe. 3. Fazer "inicialização lenta" (criação na primeira utilização) no acessor3. Fazer "inicialização lenta" (criação na primeira utilização) no acessor função. 4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado.4. Definir todos os construtores para ser protegido ou privado. 5. Os clientes só podem utilizar a função de assessor para manipular o5. Os clientes só podem utilizar a função de assessor para manipular o Singleton. Regras de ouro Abstract Factory, Builder, e Prototype pode usar Singleton na sua implementação. objetos de fachada são frequentemente Singletons porque apenas um objeto Fachada é necessária. objetos de estado são frequentemente Singletons. A vantagem de Singleton sobre variáveis ​​globais é que você tem certeza absoluta do número de casos em que você usar Singleton, e, você pode mudar sua mente e gerenciar qualquer número de instâncias. O padrão de design Singleton é um dos padrões mais usados ​​inadequadamente. Singletons se destinam a ser usadas quando uma classe deve ter exatamente um exemplo, nem mais, nem menos. Designers utilizam frequentemente Singletons em uma tentativa equivocada de substituir variáveis ​​globais. A Singleton é, para os efeitos, uma variável global. Será que o Singleton não acabar com o global, ele simplesmente renomeia. Quando é Singleton desnecessário? Resposta curta - a maior parte do tempo.Quando é Singleton desnecessário? Resposta curta - a maior parte do tempo. Resposta longa: quando é mais simples para passar um recurso objeto como uma referência para os objetos que precisam, em vez de objetos deixando acessar o recurso globalmente. O problema real com Singletons é que eles dão-lhe uma boa desculpa como não pensar cuidadosamente sobre a visibilidade apropriada de um
  • 2. 100 | coisa única objeto. Encontrar o equilíbrio certo de exposição e proteção para um objeto é fundamental para manter a flexibilidade. O nosso grupo tinha um mau hábito de usar dados globais, então eu fiz um grupo de estudo sobre Singleton. A próxima coisa que eu sei Singletons apareceu em todos os lugares e nenhum dos problemas relacionados com dados globais foi embora. A resposta à pergunta de dados global não é " Torná-lo um Singleton".A resposta à pergunta de dados global não é " Torná-lo um Singleton". A resposta é, " Por que diabos você está usando dados global?" Alterar o nome nãoA resposta é, " Por que diabos você está usando dados global?" Alterar o nome nãoA resposta é, " Por que diabos você está usando dados global?" Alterar o nome não muda o problema. Na verdade, ele pode torná-lo pior, porque lhe dá a oportunidade de dizer, " Bem, eu não vouNa verdade, ele pode torná-lo pior, porque lhe dá a oportunidade de dizer, " Bem, eu não vou fazer isso, eu estou fazendo isso" - mesmo que isso e que são a mesma coisa.fazer isso, eu estou fazendo isso" - mesmo que isso e que são a mesma coisa.
  • 3. Estado | 101 Estado Intenção • Permitir que um objecto para alterar o seu comportamento quando as suas mudanças de estado interno. O objeto aparecerá para mudar sua classe. • Uma máquina de estado orientado para o objecto • invólucro + wrappee polimórfica + colaboração Problema O comportamento de um objeto monolítico é uma função do seu estado, e deve mudar seu comportamento em tempo de execução, dependendo esse estado. Ou, um pedido é characterixed por grandes e numerosos declarações de caso que o fluxo de vector de controlo com base no estado do pedido. Discussão O padrão de Estado é uma solução para o problema de como tornar o comportamento dependem do estado. • Definir uma classe "contexto" para apresentar uma interface única para o mundo exterior. • Definir uma classe base abstrata Estado. • Representar os diferentes "estados" da máquina estatal como classes derivadas da classe base Estado. • Definir o comportamento específico do estado nas classes do Estado derivada apropriadas. • Manter um ponteiro para o "estado" atual na classe "contexto". • Para alterar o estado da máquina de estado, alterar o ponteiro atual "estado". O padrão de Estado não especifica onde as transições de estado será definido. As opções são duas: o "contexto" objeto, ou cada classe derivada Estado individual. A vantagem da segunda opção é a facilidade de adicionar novas classes de Estado derivada. A desvantagem é cada classe Estado derivada tem conhecimento de (acoplamento a) seus irmãos, que introduz as dependências entre as subclasses.
  • 4. A abordagem baseada em tabelas para projetar máquinas de estados finitos faz um bom trabalho de especificar transições de estado, mas é difícil para adicionar ações para acompanhar as transições de estado. A abordagem baseada em padrões usa código (em vez de estruturas de dados) para especificar transições de estado, mas ele faz um bom trabalho de ações de transição de estado que acomodam. Estrutura A interface do máquina de estado é encapsulado na classe "wrapper". A interface do hierarquia wrappee espelha a interface do invólucro com a exceção de um parâmetro adicional. O parâmetro extra permite que classes wrappee derivado de chamar de volta para a classe wrapper conforme necessário. Complexidade que de outro modo arrastar para baixo a classe de invólucro é nitidamente compartimentado e encapsulado numa hierarquia polimórfica para que os delegados invólucro objeto. Exemplo O padrão Estado permite que um objeto para mudar seu comportamento quando seu estado interno muda. Este padrão pode ser observado em uma máquina de venda automática. Máquinas de venda automática tem estados com base no inventário, a quantidade de moeda 102 | Estado
  • 5. depositada, a capacidade de fazer a mudança, o item selecionado, etc. Quando a moeda é depositado e uma seleção é feita, uma máquina de venda automática será ou entregar um produto e nenhuma mudança, entregar um produto e mudança, entregar nenhum produto devido à moeda insuficiente sobre depósito, ou entregar nenhum produto devido ao esgotamento de estoques. Lista de controle 1. Identificar uma classe existente ou criar uma nova classe, que servirá como a "máquina de estado" do ponto de vista do cliente. Essa classe é a classe "wrapper". 2. Crie uma classe base Estado que replica os métodos da interface de máquina de estado. Cada método recebe um parâmetro adicional: uma instância da classe wrapper. A classe base Estado especifica qualquer comportamento útil "default". 3. Crie uma classe Estado derivada para cada estado de domínio. Estas classes derivadas única substituir os métodos que eles precisam para substituir. 4. A classe wrapper mantém uma "corrente" objeto de estado. 5. Todos os pedidos de clientes para a classe de mensagens publicitárias são simplesmente delegado ao objeto estado atual, e o objeto de invólucro de isto ponteiro é passado.estado atual, e o objeto de invólucro de isto ponteiro é passado.estado atual, e o objeto de invólucro de isto ponteiro é passado. 6. Os métodos estaduais alterar o estado "corrente" no objeto wrapper conforme apropriado. Estado | 103