@startuml package com.iluwatar.viewhelper { interface View { +render(T model) } interface ViewHelper { +prepare(S source): T } class Product { -name: String -price: BigDecimal -releaseDate: LocalDate -discounted: boolean } class ProductViewModel { -name: String -price: String -releasedDate: String } class ProductViewHelper { +prepare(Product): ProductViewModel } class ConsoleProductView { +render(ProductViewModel) } class ProductController { -helper: ViewHelper -view: View +handle(Product) } } Product --> ProductViewHelper ProductViewHelper ..|> ViewHelper ConsoleProductView ..|> View ProductViewHelper --> ProductViewModel ProductController --> ProductViewHelper ProductController --> ConsoleProductView @enduml