1️⃣ Singleton Pattern
Its like a global variable of instances like every part of the application can access it , it also makes it dificult to test and debug. But easy to use.
// Multi logger
const logger1 = new Logger();
const logger2 = new Logger();
// Single Logger
const logger = Logger.getInstance();
---
config:
theme: redux
layout: dagre
---
flowchart LR
subgraph s1["Application"]
n1["UserInterface"]
n2["Database Layer"]
n3["Authentication Service"]
end
subgraph s2["Singleton Logger"]
n4["LogerInstance"]
n5["Database"]
end
n1 -- logErr(UI Crashes) --> n4
n2 -- logErr(DB Connection Faild) --> n4
n3 -- logErr(Authentication Faild) --> n4
n4 --> n5
n4@{ shape: rect}
n5@{ shape: db}
style n5 stroke:#00C853,fill:transparent
style s1 stroke:#FF6D00,fill:transparent
style s2 fill:transparent Without Singleton
---
config:
theme: redux
layout: dagre
---
flowchart LR
subgraph s1["Application"]
n1["UserInterface"]
n2["Database Layer"]
n3["Authentication Service"]
end
subgraph s2["Multiple Loggers"]
n4["Logger Instance 1"]
n6["Logger Instance 2"]
n7["Logger Instance 3"]
n5["Log File 1"]
end
n2 -- "logErr()" --> n4
n4 -- "format 1" --> n5
n1 -- "logErr()" --> n6
n3 -- "logErr()" --> n7
n6 -- "format 2" --> n5
n7 -- "format 3" --> n5
n4@{ shape: rect}
n5@{ shape: db}
style n4 fill:#757575
style n6 fill:#757575
style n7 fill:#757575
style n5 stroke:#00C853,fill:transparent
style s2 fill:transparent
style s1 stroke:#FF6D00,fill:transparent