48 920
edições
m (ajustes usando script) |
|||
[[
'''''State''''' é um [[padrão de projeto de software]] usado quando o comportamento de um objeto muda, dependendo do seu estado.
O seguinte diagrama é uma representação da estrutura e relações das classes que servem de modelo para os objetos.
[[
=== 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.
[[
== Problema ==
* Aumenta o número de subclasses.
== Implementação (Java) ==
<source lang="java5">
public class Main {
<source lang="java5">
/**
* Livro define o contexto para este exemplo simples de padrão estado.
* Um Livro pode estar em dois estados: Disponível ou Emprestado, de modo que
* se escolhermos por representar o estado com um atributo, os métodos da
* classe Livro acabariam por converter-se em condicionais sobre esse estado.
*/
}
// Este método modifica o estado do livro. Problema: o método deve
// ser acessado a partir de uma classe externa (EstadoLivro), o que exclui
// a visibilidade private e protected. public é demasiado geral pois
// *todas* as classes podem acessar o método. Neste caso, sugere-se a
// visibilidade de package, com Livro e os seus estados no mesmo package.
// Os métodos de dependentes do estado delegam o comportamento
// definido para cada estado. Uma vez que vamos dar aos estados
// a responsabilidade de realizar as transições, passamos o livro
// ao estado para que possa, se lhe interessar, chamar estabelecerEstado.
this.estado.devolver(this);
}
public boolean solicitar() {
return this.estado.solicitar(this);
protected Disponivel() {}
public static Disponivel instancia() {
if (this.instancia == null)
this.instancia = new Disponivel();
return this.instancia;
}
protected Emprestado() {}
public static Emprestado instancia() {
if (this.instancia == null)
this.instancia = new Emprestado();
return this.instancia;
}
|