@startuml
package com.iluwatar.model.view.intent.actions {
  class AdditionCalculatorAction {
    + TAG : String {static}
    + AdditionCalculatorAction()
    + tag() : String
  }
  interface CalculatorAction {
    + tag() : String {abstract}
  }
  class DivisionCalculatorAction {
    + TAG : String {static}
    + DivisionCalculatorAction()
    + tag() : String
  }
  class MultiplicationCalculatorAction {
    + TAG : String {static}
    + MultiplicationCalculatorAction()
    + tag() : String
  }
  class SetVariableCalculatorAction {
    + TAG : String {static}
    + variable : Double
    + SetVariableCalculatorAction(variable : Double)
    + tag() : String
  }
  class SubtractionCalculatorAction {
    + TAG : String {static}
    + SubtractionCalculatorAction()
    + tag() : String
  }
}
package com.iluwatar.model.view.intent {
  class App {
    + App()
    + main(args : String[]) {static}
  }
  class CalculatorModel {
    + output : Double
    + variable : Double
    + CalculatorModel(output : Double, variable : Double)
    + copy(output : Double, variable : Double) : CalculatorModel
  }
  class CalculatorView {
    - LOGGER : Logger {static}
    ~ viewModel : CalculatorViewModel
    + CalculatorView()
    ~ add()
    ~ displayTotal()
    ~ divide()
    ~ multiply()
    ~ setVariable(value : Double)
    ~ subtract()
  }
  class CalculatorViewModel {
    - model : CalculatorModel
    + CalculatorViewModel()
    - add()
    - divide()
    + getCalculatorModel() : CalculatorModel
    ~ handleAction(action : CalculatorAction)
    - multiply()
    - setVariable(variable : Double)
    - subtract()
  }
}
CalculatorView -->  "-viewModel" CalculatorViewModel
CalculatorViewModel -->  "-model" CalculatorModel
AdditionCalculatorAction ..|> CalculatorAction 
DivisionCalculatorAction ..|> CalculatorAction 
MultiplicationCalculatorAction ..|> CalculatorAction 
SetVariableCalculatorAction ..|> CalculatorAction 
SubtractionCalculatorAction ..|> CalculatorAction 
@enduml