Padrões de Projeto GRASP e GoF

Classificado em Computação

Escrito em em português com um tamanho de 4,41 KB.

GRASP (General Responsibility Assignment Software Patterns)

GRASP - Revela padrões de atribuição de responsabilidade para entidades O.O.

  • Creator: Define quem vai criar um objeto específico.
  • Expert: Faz algo quem é expert naquilo. É o padrão mais utilizado para atribuir responsabilidade. Problemas: Nem sempre a informação está concentrada em um só lugar.
  • Controller: Eventos externos são normalmente provenientes do uso do sistema. O controlador define os métodos que permitem operar o sistema. Se o controlador é do sistema completo: é dito um Facade Controller.
  • Controller vs Facade: Controller é um conceito exclusivo para eventos externos. Facade é um padrão GoF que extrapola Controller.

Herança e Composição

Mecanismos para reutilizar funcionalidade.

  • Herança: Estende atributos e métodos. Aproveita o código.
  • Composição: Delegação de trabalho para outro objeto.

Herança

  • Atributos e métodos comuns na superclasse. Adicionamos mais atributos e métodos nas subclasses.
  • Problemas:
    • Encapsulamento entre classes e subclasses é fraco.
    • Acoplamento entre superclasse e subclasses é forte.
    • Mudar uma superclasse pode afetar todas as subclasses.

Composição

  • Use composição para estender responsabilidades pela delegação de trabalho a outros objetos.
  • Exemplo: Empresa tem departamentos. Objeto empresa é responsável pelos objetos departamentos. Agregação composta (composição).
  • Delegação é um modo mais geral de estender uma classe, onde um objeto, em vez de realizar uma de suas tarefas, delega tal tarefa a um objeto auxiliar associado.

Padrões GoF (Gang of Four)

Criacionais

  • Lidam com o processo de criação de objetos. Seja para abstrair ou adiar esse processo.
  • Tornam-se mais importantes quando os sistemas dependem mais da composição de objetos do que da herança de classes.
  • Ex: Singleton, Factory Method, Abstract Factory.

Estruturais

  • Lidam com a composição (parte interna) de classes ou objetos.
  • Ex: Proxy, Adapter, Decorator.

Comportamentais

  • Lidam com a distribuição de responsabilidades entre as entidades.
  • Ex: Template Method, Observer.

Padrão Singleton

Garantir que uma classe possui somente uma instância e prover um ponto de acesso global a essa instância. Algumas aplicações têm a necessidade de controlar o número de instâncias criadas de algumas classes.

public class Singleton {

    private static Singleton unicaInstancia;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (unicaInstancia == null)
            unicaInstancia = new Singleton();
        return unicaInstancia;
    }
}

Padrão Factory Method

Definir uma interface para criar objetos de forma a deixar subclasses decidirem qual classe instanciar. Usar quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar. Quando uma classe quer que suas subclasses especifiquem os objetos criados. Tem baixo acoplamento e maior flexibilidade.

Padrão Abstract Factory

Permite a criação de famílias de objetos relacionados ou dependentes por meio de uma única interface e sem que a classe concreta seja especificada. Usa quando necessitamos trocar implementações concretas sem alterar o código que estas usam, mesmo em tempo de execução. Ex: Múltiplas interfaces.

  • Facilita a adição ou remoção de um tipo de interface, ou de um conjunto de objetos.
  • O padrão isola classes concretas.
  • Facilita o câmbio de famílias de produtos.
  • Promove a consistência entre produtos.
  • Factory Method é usado para criar um produto (objeto), enquanto Abstract Factory é responsável por instanciar famílias de objetos relacionados/dependentes.
  • Factory Method expõe o método de fábrica para o cliente criar o objeto, enquanto Abstract Factory expõe a fábrica que instancia a família de objetos.

Entradas relacionadas: