State: diferenças entre revisões

186 bytes adicionados ,  17h34min de 9 de maio de 2012
sem resumo de edição
O padrão State é motivado por aqueles objetos que, em seu estado atual, varia o seu comportamento devido as diferentes mensagens que possa receber.
Como exemplo, tomamos uma classe Livro, um objeto desta classe terá respostas diferentes, dependendo da seu estado(Disponível o Prestado). Por exemplo invocando o método reservar de um objeto da classe Livro seu comportamento será diferente, se o Livro está no estado Disponível o no estado Prestado.
 
=== Diagrama de EstadosClasses ===
 
O seguinte diagrama é uma representação da estrutura e relações das classes que servem de modelo para os objetos.
 
[[File:LibroActualizado.jpg| center | Diagrama UML, ejemplo Padrão State]]
 
=== Diagrama de Estados ===
 
No seguinte diagrama representamos os possíveis estados ou situações em que um Livro pode se encontrar no decorrer da execução em nosso sistema.
 
[[File:EstadosState.jpg| center | Diagrama de Estados em UML, ejemplo Padrão State]]
 
== Problema ==
O Contexto delega o estado específico para o objeto EstadoConcreto atual. Um objeto de Contexto pode passar-se como parâmetro a um objeto Estado. Assim, a classe Estado pode acessar o contexto, se fosse necessário.
Contexto é a interface principal para o cliente. O cliente pode configurar um contexto com objetos Estado. Uma vez feito isso, os clientes não têm de lidar com objetos de tipo Estado diretamente. Tanto o objeto de Contexto como os objetos de EstadoConcreto podem decidir a mudança de estado.
 
== Diagrama de Estados ==
 
No seguinte diagrama representamos os possíveis estados ou situações em que um Livro pode se encontrar no decorrer da execução em nosso sistema.
 
[[File:EstadosState.jpg| center | Diagrama de Estados em UML, ejemplo Padrão State]]
 
== Colaborações ==
= Implementación (Java) =
<source lang="java5">
public class Main {
 
public static void main(String argv[]) {
*/
 
public class Livro {
 
// O construtor da classe, además de inicializar o título do
*/
 
public abstract class EstadoLivro {
 
// Os métodos devolver e solicitar são abstratos (devem ser implementados
*/
 
public class Disponivel extends EstadoLibro {
 
// Uma vez que em este exemplo os estados dos livros nao vao a conter
*/
 
public class Prestado extends EstadoLivro {
 
// Dado que neste exemplo os estados dos livros não vão a conter