Skip to content

GOFs Criacionais

Versionamento

Data Versão Descrição Autores
03/09/2021 1.0 Criação do Documento Hugo Bezerra, Lucas Rodrigues, Marcos Adriano
14/09/2021 1.1 Adição das imagens Hugo Bezerra, Kleidson, Lucas Rodrigues, Lucas Gabriel
15/09/2021 1.2 Adição Singleton Kleidson, Gabriel Batalha, Lucas Gabriel, Lucas Rodrigues
15/09/2021 1.3 Adição Prototype Davi Antônio
16/09/2021 1.4 Corrigir erros ortográficos e melhorar referencial teórico Davi Antônio
20/09/2021 1.5 Revisão do documento e remoção do Singleton Kleidson, Gabriel Batalha, Lucas Gabriel, Lucas Rodrigues
20/09/2021 1.6 Revisão ortográfica e gramatical Davi Antônio, Wellington Jonathan

Factory Method

Introdução

O Factory Method é um dos padrões de criação de objetos descritos no livro Design Patterns: Elements of Reusable Object-Oriented Software (JOHNSON, Eric et al.; 1995) da seguinte maneira: defina uma interface para a criação de objetos e deixe para a subclasse a decisão de qual classe instanciar.

Modelagem

Autores: Gabriel Batalha, Kleidson Alves, Lucas Gabriel, Lucas Rodrigues

Aplicação

Comentário

No projeto, utilizamos o Factory method para criação dos diferentes tipos de botões. A utilização desse padrão de projeto faz com que não seja necessário o conhecimento direto de cada construtor das diferentes classes dos botões. Por isso, utiliza-se a classe FactoryButton especificando o tipo de botão desejado, obtendo a instância de uma das classes.

Prototype

O padrão de protótipo cria novos objetos a partir de um objeto original ou base, o chamado protótipo, que implementa um método de clonagem que pode ou não especificar o estado desejado. Segundo JOHNSON, Eric et al., esse padrão é adequado para criar objetos com poucos estados possíveis dinamicamente, já que nessa situação não é necessária a complexidade adicionada com o uso de hierarquias com fábricas.

Modelagem

(JOHNSON, Eric et al.; 1995)

Há muitas maneiras de se implementar esse padrão. Algumas implementações, sugeridas pelo livro Design Patterns (JOHNSON, Eric et al.; 1995), possuem maior complexidade, assemelhando-se a uma fábrica, permitindo a instância de classes a partir de um repositório de protótipos disponíveis.

Aplicação

O exemplo autoral a seguir é uma adaptação do padrão Prototype. A classe não realiza uma interface ou estende uma classe abstrata com um método de clonagem. Entretanto, o método de clonagem permite que um cliente especifique, usando os parâmetros nomeados da linguagem Dart, o estado desejado do objeto que será criado como clone.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class SignInFormModel {
  final String email;
  final String password;
  final bool isLoading;

  SignInFormModel({
    this.email = "",
    this.password = "",
    this.isLoading = false,
  });

  bool get canSubmit => email.isNotEmpty && password.isNotEmpty && !isLoading;

  SignInFormModel copyWith({
    String email,
    String password,
    bool isLoading,
  }) {
    return SignInFormModel(
        email: email ?? this.email,
        password: password ?? this.password,
        isLoading: isLoading ?? this.isLoading);
  }

Nessa implementação, um parâmetro nomeado que não é informado não causará modificação no atributo referente a ele. Isso possibilita a redução na criação de objetos para os atributos, já que um atributo não modificado simplesmente utilizará a referência do objeto original.

Referências

PADRÕES de PROJETO. Disponível em: https://refactoring.guru/pt-br/design-patterns. Data de acesso: 03/09/2021

PADRÕES Gof. Disponível em: http://www.facom.ufu.br/~bacala/ESOF/05b-Padrões%20Gof.pdf. Data de acesso: 03/09/2021

Design Patterns: Padrões “GoF”. Disponível em: https://www.devmedia.com.br/design-patterns-padroes-gof/16781. Data de acesso: 03/09/2021

Flutter Design Patterns: 10 — Factory Method. Disponível em:https://medium.com/flutter-community/flutter-design-patterns-10-factory-method-c53ad11d863f. Data de acesso: 10/09/2021

Flutter Design Patterns: 1 — Singleton. Disponível em: https://medium.com/flutter-community/flutter-design-patterns-1-singleton-437f04e923ce. Data de acesso: 14/09/2021

Singleton em TypeScript. Disponível em: https://refactoring.guru/pt-br/design-patterns/singleton/typescript/example#lang-features. Data de acesso: 14/09/2021

JOHNSON, Eric et al. Design Patterns: Elements of Reusable Object-Oriented Software. 1995.