segunda-feira, 16 de agosto de 2010

LTIII: Lista de exercícios de padrões de projeto

Pessoal,
Está disponível no link a seguir uma lista de exercícios sobre padrões de projeto. Acrescentei nessa lista mais uma questão.

http://www.4shared.com/document/nf9Dv12r/Lista_Padrao_Projeto.html

A seguir segue o conteúdo da mesma:

1.    Uma boa prática no desenvolvimento de aplicações é o registro de exceções, de informações de controle ou de segurança nas aplicações. Chamamos isso de Log da aplicação. Uma aplicação não precisa ter mais do que uma classe gerando e registrando as informações do log. Nesse contexto, o padrão de projeto Singleton pode ser implementado. Portanto, aplique esse padrão nas classes apresentadas a seguir. A classe Logger usa a variável ativo para indicar se as informações podem ser exibidas, enquanto que a classe Aplicacao é a classe que utiliza dois objetos de tipo Logger. A classe Windows é a principal.

public class Logger {
/* por default não imprime o log */
private boolean ativo = false;
public Logger() {}
public boolean isAtivo() {
return this.ativo;
}
public void setAtivo(boolean b) {
this.ativo = b;
}
public void log(String s) {
      if(this.ativo)
System.out.println("LOG :: " + s);
   
}
}

Agora a classe Aplicacao:
public class Aplicacao {
public static void main(String[] args) {
Logger log1 = new Logger();
log1.setAtivo(true);
log1.log("PRIMEIRA MENSAGEM DE LOG");
Logger log2 = new Logger();
log2.log("SEGUNDA MENSAGEM DE LOG");
}
}

Resultado da aplicação antes de aplicar o padrão:
PRIMEIRA MENSAGEM DE LOG

Ao aplicar o padrão, a classe aplicação deverá utilizar o mesmo objeto do tipo Logger nas duas chamadas ao método log, portanto o resultado da aplicação será:
PRIMEIRA MENSAGEM DE LOG
SEGUNDA MENSAGEM DE LOG
Passo 1: Torne o construtor de Logger privado;
Passo 2: Crie uma variável estática logger para conter uma referência única ao objeto de Logger; instancie a variável com null;
Passo 3: Crie um método estático getInstance. Se não existir uma referencia em logger crie uma instancia de Logger  e atribuia a logger, em seguida retorne logger; se existe retornar a referência para logger.

Passo 4: Na classe Aplicacao, substitua todos os “new Logger()” pelo uso do método estático getInstance criado no passo 3;
Passo 5: Teste o código.

2.    Considere que sua aplicação agora vai precisar especializar o comportamento de Logger. Teremos agora as classes: LoggerEventViewer  – que  registra os eventos no EventViewer; LoggerFile – que registra o evento em arquivo de sistema ou LoggerDatabase – que registra o evento em um banco de dados. Considere que a aplicação pode escolher qualquer uma dessas formas de registro de log. Mostre como esse problema pode ser resolvido utilizando o padrão de projeto Strategy. Utilize as classes: Logger e Aplicacao da questão anterior.

3.    Você foi contratado por uma empresa que desenvolve aplicações para edição e manipulação de imagens. Seu chefe apresentou para você as seguintes classes:
public class Visualizador{

        public void Visualizar(){
            Imagem img = nem Imagem();
            img.carregar();
            img.exibir();
            img.fechar();

        }
}

public class Imagem{
    public void carregar() {
           System.out.println("Imagem BMP:");
           System.out.println("Carregando imagem BMP...");
           System.out.print("...");
           System.out.print("...");
           System.out.print("");
    }

    public void exibir() {
           System.out.println("Exibindo imagem por 20 segundos.");
    }

    public void fechar() {
           System.out.println("Fechando imagem.");
    }
}

Essas classes são responsáveis por carregar imagens do tipo BMP. Seu chefe mandou que você alterasse o código de forma que a criação de novos visualizadores de imagem ficasse mais flexível. Crie as seguintes classes: VisualizadorJPG – que visualiza imagens do tipo JPG e ImagemJPG – que trata de imagens JPG. O código deve ser desenvolvido de forma que a criação de qualquer outro visualizador seja rápida e flexível. Para resolver esse problema altere o código acima usando o padrão Factory Method.

4.    Na biblioteca existe a lista de espera de determinado livro. Existe uma única lista de espera para cada livro e quando o livro retorna para a biblioteca os alunos inscritos na lista recebem a notificação de que o livro está disponível. Faça o modelo de classe, somente com os métodos mais importantes, do contexto apresentado, considerando que os padrões de projeto Singleton e Observer serão utilizados na solução.

Pesquisar neste blog

Google