Skip to content

Adapter GoF

Lucas Andrade Oliveira edited this page Jun 23, 2017 · 8 revisions

Histórico da revisão

Data Versão Modificações Autor
31/05/2017 0.5 Estrutura inicial do Documento Lucas Andrade
01/05/2017 1.0 Adicionando Modelagem e detalhes da mesma Lucas Andrade, Júlio Xavier e Jhonatan Alves
22/06/2017 1.1 atualizando modelagem Gesiel Freitas
22/06/2017 1.2 Adicionando detalhes de implementação Nicácio Arruda

1. Adapter

Adapter (as vezes chamado de Wrapper) é um padrão GoF estrutural que tem como finalidade converter uma interface de um classe para que essa se comunique com a interface de outra classe inconpatível. Assim quando temos uma classe cuja a interface possui respostas ou conteúdos que não combinam com o esperado pelo cliente (ou por outra classe intermediária).

1.1 Motivação

A motivação para utilizar esse padrão no projeto InoxConverter se deve ao fato da necessidade de consumir dados de uma API de cotação de moedas. Os dados fornecidos pela API não possuem um formato esperado pela a linguagem Ruby, ou seja, não são compatíveis com a gem.

1.2 Problema Solucionado

O problema a ser solucionado é que o Adapter vai tratar os dados fornecidos pela API (em formato XML) para que eles possam ser utilizados nas funções de conversão escritas em código Ruby (versão da linguagem 2.3.1). Com isso o Adapter se mostra bastante eficiente para resolver a incompatibilidade dos dados manipulados entre as classes da aplicação.

2. Modelagem

Adapter

Figura 01 - Modelagem do Adapter

2.1 Detalhes da modelagem

A classe API será o nosso Adaptee, pois é a classe responsável por consume a api de cotação de moedas em formato XML e que precisa ser adaptado.

A classe CurrencyAdapter será a classe que vai fazer a adapção dos dados de XML (classe API, adapter) para Ruby (classe Currency, target).

A classe Currency será nosso Alvo (target), ou seja, a classe que o cliente (usuário da gem), vai utilizar.

2.2 Detalhes da Implementação

Trecho de código da classe API -- Adaptee

API Code

Classe CurrencyAdapter

Currency Adapter Code

Classe Currency

Currency Code

Clone this wiki locally