@startuml
skin rose

interface Computer {
    void InitSetup();
    void SetupGame();
    void GameStart();
}
interface Builder {
    void MakeCpu();
    void MakeMemory();
    void MakeHardDisk();
    void MakeDisplay();
    void MakeKeyboard();
    std::string to_string();
    Computer GetResult();
}
Builder -u-> "1" Computer

class LenovoBuilder implements Builder
class DellBuilder implements Builder
class Director {
    Computer Construct();
}
Director -r-> "1" Builder
Director -u-> "1" Computer

interface Cpu
class Intel implements Cpu
class Amd implements Cpu

interface Memory
class Samsung implements Memory
class Kingston implements Memory

interface HardDisk
class WesternDatabase implements HardDisk
class Seagate implements HardDisk

interface Display
class Samsung implements Display
class Philips implements Display

interface Keyboard
class Lenovo implements Keyboard
class Logitech implements Keyboard

LenovoBuilder --> "1" Cpu
LenovoBuilder --> "1" Memory
LenovoBuilder --> "1" HardDisk
LenovoBuilder --> "1" Display
LenovoBuilder --> "1" Keyboard

DellBuilder --> "1" Cpu
DellBuilder --> "1" Memory
DellBuilder --> "1" HardDisk
DellBuilder --> "1" Display
DellBuilder --> "1" Keyboard

@enduml