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.