# josevictorbdbr/designpatternsexercise architecture

> Architecture diagram of the GitHub repository josevictorbdbr/designpatternsexercise, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/josevictorbdbr/designpatternsexercise
- Repository: https://github.com/josevictorbdbr/designpatternsexercise

## Overview

This repository contains two independent Java design-pattern exercises. The insurance example accepts policy-specific inputs through a client and creator hierarchy, then emits policy details; the checkout example uses region-specific factories to select invoice, payment, and shipping implementations. The README identifies each Main class as an independently runnable exercise. Some implementations—especially insurance creators and the Brazil checkout factory—were not sampled, so their internal wiring is not expanded.

Main entry points: [`src/main/java/com/josevictor/ex1/main.java`](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/main.java) (Insurance Main), [`src/main/java/com/josevictor/ex2/Main.java`](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Main.java) (Checkout Main), [`src/main/java/com/josevictor/ex2/Checkout.java`](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Checkout.java) (Checkout), [`src/main/java/com/josevictor/ex2/FabricaEUA.java`](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaEUA.java) (US factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_insurance["Insurance policies"]
  node_insurance_main["Insurance Main<br/>[main.java]"]
  node_client["Client<br/>[Cliente.java]"]
  node_creator["Policy creator<br/>[Criador.java]"]
  node_creator_auto["Auto creator<br/>[CriadorAuto.java]"]
  node_creator_home["Home creator"]
  node_creator_life["Life creator<br/>[CriadorVida.java]"]
  node_creator_travel["Travel creator<br/>[CriadorViagem.java]"]
  node_policy["Policy base<br/>[Apolice.java]"]
  node_policy_auto["Auto policy<br/>[ApoliceAuto.java]"]
  node_policy_home["Home policy"]
  node_policy_life["Life policy<br/>[ApoliceVida.java]"]
  node_policy_travel["Travel policy<br/>[ApoliceViagem.java]"]
end

subgraph group_checkout["Regional checkout"]
  node_checkout_main["Checkout Main<br/>[Main.java]"]
  node_order["Order data<br/>[Pedido.java]"]
  node_checkout["Checkout<br/>[Checkout.java]"]
  node_factory["Checkout factory"]
  node_factory_br["Brazil factory<br/>[FabricaBrasil.java]"]
  node_factory_us["US factory<br/>[FabricaEUA.java]"]
  node_factory_de["Germany factory"]
  node_invoice["Fiscal document"]
  node_invoice_br["Brazil invoice<br/>[NotaFiscal.java]"]
  node_invoice_us["Sales invoice<br/>[SalesInvoice.java]"]
  node_invoice_de["VAT invoice<br/>[VATInvoice.java]"]
  node_payment["Payment<br/>[Pagamento.java]"]
  node_payment_card["Credit card<br/>[CartaoCredito.java]"]
  node_payment_pix["PIX<br/>[Pix.java]"]
  node_payment_sepa["SEPA debit"]
  node_shipping["Shipping label<br/>[Etiqueta.java]"]
  node_shipping_br["Correios<br/>[Correios.java]"]
  node_shipping_us["USPS<br/>[USPS.java]"]
  node_shipping_de["Deutsche Post<br/>[DeutschePost.java]"]
end

node_insurance_user(("Exercise runner"))
node_checkout_user(("Exercise runner"))

node_insurance_user -->|"runs"| node_insurance_main
node_insurance_main -->|"invokes"| node_client
node_insurance_main -->|"creates"| node_creator_auto
node_insurance_main -->|"creates"| node_creator_home
node_insurance_main -->|"creates"| node_creator_life
node_insurance_main -->|"creates"| node_creator_travel
node_client -->|"processes"| node_creator
node_checkout_user -->|"runs"| node_checkout_main
node_checkout_main -->|"creates"| node_order
node_checkout_main -->|"selects"| node_factory_br
node_checkout_main -->|"selects"| node_factory_us
node_checkout_main -->|"selects"| node_factory_de
node_checkout_main -->|"invokes"| node_checkout
node_checkout -->|"processes"| node_order
node_checkout -->|"requests products"| node_factory
node_checkout -->|"generates"| node_invoice
node_checkout -->|"processes"| node_payment
node_checkout -->|"generates"| node_shipping
node_factory_us -->|"creates"| node_invoice_us
node_factory_us -->|"creates"| node_payment_card
node_factory_us -->|"creates"| node_shipping_us
node_factory_de -->|"creates"| node_invoice_de
node_factory_de -->|"creates"| node_payment_sepa
node_factory_de -->|"creates"| node_shipping_de
node_invoice_br -->|"reads"| node_order
node_invoice_us -->|"reads"| node_order

click node_insurance_main "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/main.java"
click node_client "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Cliente.java"
click node_creator "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Criador.java"
click node_creator_auto "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorAuto.java"
click node_creator_home "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorResidencia.java"
click node_creator_life "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorVida.java"
click node_creator_travel "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorViagem.java"
click node_policy "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Apolice.java"
click node_policy_auto "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceAuto.java"
click node_policy_home "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceResidencia.java"
click node_policy_life "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceVida.java"
click node_policy_travel "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceViagem.java"
click node_checkout_main "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Main.java"
click node_order "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pedido.java"
click node_checkout "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Checkout.java"
click node_factory "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaCheckout.java"
click node_factory_br "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaBrasil.java"
click node_factory_us "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaEUA.java"
click node_factory_de "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaAlemanha.java"
click node_invoice "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/DocumentoFiscal.java"
click node_invoice_br "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/NotaFiscal.java"
click node_invoice_us "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/SalesInvoice.java"
click node_invoice_de "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/VATInvoice.java"
click node_payment "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pagamento.java"
click node_payment_card "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/CartaoCredito.java"
click node_payment_pix "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pix.java"
click node_payment_sepa "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/SepaDirectDebit.java"
click node_shipping "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Etiqueta.java"
click node_shipping_br "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Correios.java"
click node_shipping_us "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/USPS.java"
click node_shipping_de "https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/DeutschePost.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_insurance_main,node_client,node_creator,node_creator_auto,node_creator_home,node_creator_life,node_creator_travel,node_policy,node_policy_auto,node_policy_home,node_policy_life,node_policy_travel toneBlue
class node_checkout_main,node_order,node_checkout,node_factory,node_factory_br,node_factory_us,node_factory_de,node_invoice,node_invoice_br,node_invoice_us,node_invoice_de,node_payment,node_payment_card,node_payment_pix,node_payment_sepa,node_shipping,node_shipping_br,node_shipping_us,node_shipping_de toneAmber
class node_insurance_user,node_checkout_user toneIndigo
```

## Components

### Insurance policies

- [Insurance Main](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/main.java): `src/main/java/com/josevictor/ex1/main.java`
- [Client](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Cliente.java): `src/main/java/com/josevictor/ex1/Cliente.java`
- [Policy creator](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Criador.java): `src/main/java/com/josevictor/ex1/Criador.java`
- [Auto creator](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorAuto.java): `src/main/java/com/josevictor/ex1/CriadorAuto.java`
- [Home creator](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorResidencia.java): `src/main/java/com/josevictor/ex1/CriadorResidencia.java`
- [Life creator](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorVida.java): `src/main/java/com/josevictor/ex1/CriadorVida.java`
- [Travel creator](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/CriadorViagem.java): `src/main/java/com/josevictor/ex1/CriadorViagem.java`
- [Policy base](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/Apolice.java): `src/main/java/com/josevictor/ex1/Apolice.java`
- [Auto policy](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceAuto.java): `src/main/java/com/josevictor/ex1/ApoliceAuto.java`
- [Home policy](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceResidencia.java): `src/main/java/com/josevictor/ex1/ApoliceResidencia.java`
- [Life policy](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceVida.java): `src/main/java/com/josevictor/ex1/ApoliceVida.java`
- [Travel policy](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex1/ApoliceViagem.java): `src/main/java/com/josevictor/ex1/ApoliceViagem.java`

### Regional checkout

- [Checkout Main](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Main.java): `src/main/java/com/josevictor/ex2/Main.java`
- [Order data](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pedido.java): `src/main/java/com/josevictor/ex2/Pedido.java`
- [Checkout](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Checkout.java): `src/main/java/com/josevictor/ex2/Checkout.java`
- [Checkout factory](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaCheckout.java): `src/main/java/com/josevictor/ex2/FabricaCheckout.java`
- [Brazil factory](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaBrasil.java): `src/main/java/com/josevictor/ex2/FabricaBrasil.java`
- [US factory](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaEUA.java): `src/main/java/com/josevictor/ex2/FabricaEUA.java`
- [Germany factory](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/FabricaAlemanha.java): `src/main/java/com/josevictor/ex2/FabricaAlemanha.java`
- [Fiscal document](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/DocumentoFiscal.java): `src/main/java/com/josevictor/ex2/DocumentoFiscal.java`
- [Brazil invoice](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/NotaFiscal.java): `src/main/java/com/josevictor/ex2/NotaFiscal.java`
- [Sales invoice](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/SalesInvoice.java): `src/main/java/com/josevictor/ex2/SalesInvoice.java`
- [VAT invoice](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/VATInvoice.java): `src/main/java/com/josevictor/ex2/VATInvoice.java`
- [Payment](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pagamento.java): `src/main/java/com/josevictor/ex2/Pagamento.java`
- [Credit card](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/CartaoCredito.java): `src/main/java/com/josevictor/ex2/CartaoCredito.java`
- [PIX](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Pix.java): `src/main/java/com/josevictor/ex2/Pix.java`
- [SEPA debit](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/SepaDirectDebit.java): `src/main/java/com/josevictor/ex2/SepaDirectDebit.java`
- [Shipping label](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Etiqueta.java): `src/main/java/com/josevictor/ex2/Etiqueta.java`
- [Correios](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/Correios.java): `src/main/java/com/josevictor/ex2/Correios.java`
- [USPS](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/USPS.java): `src/main/java/com/josevictor/ex2/USPS.java`
- [Deutsche Post](https://github.com/josevictorbdbr/designpatternsexercise/blob/main/src/main/java/com/josevictor/ex2/DeutschePost.java): `src/main/java/com/josevictor/ex2/DeutschePost.java`

### Other components

- **Exercise runner**
- **Exercise runner**

## Connections

- Exercise runner → Insurance Main: runs
- Insurance Main → Client: invokes
- Insurance Main → Auto creator: creates
- Insurance Main → Home creator: creates
- Insurance Main → Life creator: creates
- Insurance Main → Travel creator: creates
- Client → Policy creator: processes
- Exercise runner → Checkout Main: runs
- Checkout Main → Order data: creates
- Checkout Main → Brazil factory: selects
- Checkout Main → US factory: selects
- Checkout Main → Germany factory: selects
- Checkout Main → Checkout: invokes
- Checkout → Order data: processes
- Checkout → Checkout factory: requests products
- Checkout → Fiscal document: generates
- Checkout → Payment: processes
- Checkout → Shipping label: generates
- US factory → Sales invoice: creates
- US factory → Credit card: creates
- US factory → USPS: creates
- Germany factory → VAT invoice: creates
- Germany factory → SEPA debit: creates
- Germany factory → Deutsche Post: creates
- Brazil invoice → Order data: reads
- Sales invoice → Order data: reads
