# duskazievrizabek-art/assignment-2 architecture

> Architecture diagram of the GitHub repository duskazievrizabek-art/assignment-2, 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/duskazievrizabek-art/assignment-2
- Repository: https://github.com/duskazievrizabek-art/assignment-2

## Overview

This console application combines two runtime workflows: selecting a delivery mode to create a transport and perform a delivery, and selecting a platform to create and render matching UI components. Main validates input and chooses implementations; DeliveryApplication invokes the selected factories and logistics service. The README documents both Windows/macOS UI families and road/sea delivery. Sampled source supports the main wiring; the graph omits unshown implementation details beyond those documented capabilities.

Main entry points: [`src/Main.java`](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/Main.java) (Main), [`src/client/DeliveryApplication.java`](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/client/DeliveryApplication.java) (Delivery application), [`src/transport/Logistics.java`](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Logistics.java) (Logistics planner), [`src/ui/WindowsFactory.java`](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsFactory.java) (Windows factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Runtime orchestration"]
  node_main["Main<br/>[Main.java]"]
  node_app["Delivery application"]
end

subgraph group_delivery["Delivery creation"]
  node_logistics["Logistics planner<br/>[Logistics.java]"]
  node_road["Road logistics<br/>[RoadLogistics.java]"]
  node_sea["Sea logistics<br/>[SeaLogistics.java]"]
  node_transport["Transport contract<br/>[Transport.java]"]
  node_truck["Truck<br/>[Truck.java]"]
  node_ship["Ship<br/>[Ship.java]"]
end

subgraph group_ui["Platform UI"]
  node_gui["GUI factory contract<br/>[GUIFactory.java]"]
  node_windows_factory["Windows factory"]
  node_mac_factory["macOS factory<br/>[MacOSFactory.java]"]
  node_button["Button contract<br/>[Button.java]"]
  node_checkbox["Checkbox contract<br/>[Checkbox.java]"]
  node_windows_button["Windows button<br/>[WindowsButton.java]"]
  node_windows_checkbox["Windows checkbox"]
  node_mac_button["macOS button<br/>[MacOSButton.java]"]
  node_mac_checkbox["macOS checkbox<br/>[MacOSCheckbox.java]"]
end

node_user(("Console user"))

node_user -->|"enters choices"| node_main
node_main -->|"selects road"| node_road
node_main -->|"selects sea"| node_sea
node_main -->|"selects Windows"| node_windows_factory
node_main -->|"selects macOS"| node_mac_factory
node_main -->|"constructs and runs"| node_app
node_app -->|"creates UI components"| node_gui
node_app -->|"plans delivery"| node_logistics
node_gui -->|"dispatches to"| node_windows_factory
node_gui -->|"dispatches to"| node_mac_factory
node_windows_factory -->|"creates"| node_windows_button
node_windows_factory -->|"creates"| node_windows_checkbox
node_mac_factory -->|"creates"| node_mac_button
node_mac_factory -->|"creates"| node_mac_checkbox
node_app -->|"paints"| node_button
node_app -->|"paints"| node_checkbox
node_logistics -->|"creates and delivers"| node_transport
node_logistics -->|"dispatches create"| node_road
node_logistics -->|"dispatches create"| node_sea
node_road -->|"creates"| node_truck
node_sea -->|"creates"| node_ship
node_truck -->|"implements"| node_transport
node_ship -->|"implements"| node_transport
node_windows_button -->|"implements"| node_button
node_mac_button -->|"implements"| node_button
node_windows_checkbox -->|"implements"| node_checkbox
node_mac_checkbox -->|"implements"| node_checkbox

click node_main "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/Main.java"
click node_app "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/client/DeliveryApplication.java"
click node_logistics "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Logistics.java"
click node_road "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/RoadLogistics.java"
click node_sea "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/SeaLogistics.java"
click node_transport "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Transport.java"
click node_truck "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Truck.java"
click node_ship "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Ship.java"
click node_gui "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/GUIFactory.java"
click node_windows_factory "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsFactory.java"
click node_mac_factory "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSFactory.java"
click node_button "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/Button.java"
click node_checkbox "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/Checkbox.java"
click node_windows_button "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsButton.java"
click node_windows_checkbox "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsCheckbox.java"
click node_mac_button "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSButton.java"
click node_mac_checkbox "https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSCheckbox.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_main,node_app,node_user toneBlue
class node_logistics,node_road,node_sea,node_transport,node_truck,node_ship toneAmber
class node_gui,node_windows_factory,node_mac_factory,node_button,node_checkbox,node_windows_button,node_windows_checkbox,node_mac_button,node_mac_checkbox toneMint
```

## Components

### Runtime orchestration

- [Main](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/Main.java): `src/Main.java`
- [Delivery application](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/client/DeliveryApplication.java): `src/client/DeliveryApplication.java`

### Delivery creation

- [Logistics planner](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Logistics.java): `src/transport/Logistics.java`
- [Road logistics](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/RoadLogistics.java): `src/transport/RoadLogistics.java`
- [Sea logistics](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/SeaLogistics.java): `src/transport/SeaLogistics.java`
- [Transport contract](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Transport.java): `src/transport/Transport.java`
- [Truck](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Truck.java): `src/transport/Truck.java`
- [Ship](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/transport/Ship.java): `src/transport/Ship.java`

### Platform UI

- [GUI factory contract](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/GUIFactory.java): `src/ui/GUIFactory.java`
- [Windows factory](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsFactory.java): `src/ui/WindowsFactory.java`
- [macOS factory](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSFactory.java): `src/ui/MacOSFactory.java`
- [Button contract](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/Button.java): `src/ui/Button.java`
- [Checkbox contract](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/Checkbox.java): `src/ui/Checkbox.java`
- [Windows button](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsButton.java): `src/ui/WindowsButton.java`
- [Windows checkbox](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/WindowsCheckbox.java): `src/ui/WindowsCheckbox.java`
- [macOS button](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSButton.java): `src/ui/MacOSButton.java`
- [macOS checkbox](https://github.com/duskazievrizabek-art/assignment-2/blob/main/src/ui/MacOSCheckbox.java): `src/ui/MacOSCheckbox.java`

### Other components

- **Console user**

## Connections

- Console user → Main: enters choices
- Main → Road logistics: selects road
- Main → Sea logistics: selects sea
- Main → Windows factory: selects Windows
- Main → macOS factory: selects macOS
- Main → Delivery application: constructs and runs
- Delivery application → GUI factory contract: creates UI components
- Delivery application → Logistics planner: plans delivery
- GUI factory contract → Windows factory: dispatches to
- GUI factory contract → macOS factory: dispatches to
- Windows factory → Windows button: creates
- Windows factory → Windows checkbox: creates
- macOS factory → macOS button: creates
- macOS factory → macOS checkbox: creates
- Delivery application → Button contract: paints
- Delivery application → Checkbox contract: paints
- Logistics planner → Transport contract: creates and delivers
- Logistics planner → Road logistics: dispatches create
- Logistics planner → Sea logistics: dispatches create
- Road logistics → Truck: creates
- Sea logistics → Ship: creates
- Truck → Transport contract: implements
- Ship → Transport contract: implements
- Windows button → Button contract: implements
- macOS button → Button contract: implements
- Windows checkbox → Checkbox contract: implements
- macOS checkbox → Checkbox contract: implements
