Skip to content

Commit 4fda8e9

Browse files
Mayur KadamMayur Kadam
authored andcommitted
Update README.md files
1 parent 431e17b commit 4fda8e9

File tree

3 files changed

+122
-27
lines changed
  • 05 - Low Level Design/03 - TypeScript Design Pattern
    • Behavioral Design Patterns/Chain of Responsibility/ Logging System
    • Structural Design Patterns/Proxy/Secure Bank Account

3 files changed

+122
-27
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# Logging System - Chain of Responsibility Design Pattern
2+
3+
## Overview
4+
This project implements a **Logging System** using the **Chain of Responsibility** design pattern in TypeScript. The Chain of Responsibility pattern allows multiple objects to process a request in a sequential manner, passing the request along the chain if necessary.
5+
6+
## **Flow of Execution**
7+
1. **Base Logger Class (`Logger.ts`)**:
8+
- Defines the logging levels: `INFO`, `DEBUG`, `ERROR`, and `WARNING`.
9+
- Implements a `setNext` method to pass requests down the chain.
10+
11+
2. **Concrete Loggers**:
12+
- `InfoLogger.ts`: Handles `INFO` level logs.
13+
- `DebugLogger.ts`: Handles `DEBUG` level logs.
14+
- `ErrorLogger.ts`: Handles `ERROR` level logs.
15+
- `WarningLogger.ts`: Handles `WARNING` level logs.
16+
- If a logger cannot handle the request, it forwards it to the next logger in the chain.
17+
18+
3. **Setting Up the Chain (`index.ts`)**:
19+
- Loggers are chained together: `InfoLogger -> DebugLogger -> ErrorLogger -> WarningLogger`.
20+
- When a log request is made, it is passed through the chain until a matching logger processes it.
21+
22+
## **Code Example**
23+
### Logger Class (Base Abstract Class)
24+
```typescript
25+
abstract class Logger {
26+
static INFO = 1;
27+
static DEBUG = 2;
28+
static ERROR = 3;
29+
static WARNING = 4;
30+
31+
nextLogger: Logger | null;
32+
constructor(nextLogger: Logger | null = null) {
33+
this.nextLogger = nextLogger;
34+
}
35+
36+
abstract log(logLevel: number, message: string): void;
37+
38+
setNext(logLevel: number, message: string) {
39+
this.nextLogger?.log(logLevel, message);
40+
}
41+
}
42+
```
43+
44+
### **Concrete Logger Implementation**
45+
```typescript
46+
import { Logger } from "./Logger";
47+
48+
class InfoLogger extends Logger {
49+
constructor(nextLogger: Logger | null = null) {
50+
super(nextLogger);
51+
}
52+
53+
log(logLevel: number, message: string) {
54+
if (logLevel === Logger.INFO) {
55+
console.log(`INFO : ${message}`);
56+
} else {
57+
super.setNext(logLevel, message);
58+
}
59+
}
60+
}
61+
62+
export { InfoLogger };
63+
```
64+
65+
### **Index File - Setting Up the Chain**
66+
```typescript
67+
import { Logger } from "./Logger";
68+
import { InfoLogger } from "./InfoLogger";
69+
import { DebugLogger } from "./DebugLogger";
70+
import { ErrorLogger } from "./ErrorLogger";
71+
import { WarningLogger } from "./WarningLogger";
72+
73+
const loggerObj: Logger = new InfoLogger(
74+
new DebugLogger(
75+
new ErrorLogger(
76+
new WarningLogger()
77+
)
78+
)
79+
);
80+
81+
loggerObj.log(Logger.DEBUG, "ITS DEBUG VALUE");
82+
loggerObj.log(Logger.INFO, "HEY THIS IS INFORMATION");
83+
loggerObj.log(Logger.ERROR, "EXCEPTION CAUGHT");
84+
loggerObj.log(Logger.WARNING, "ITS WARNING ON RENDERING");
85+
```
86+
87+
## **Benefits of the Chain of Responsibility Pattern**
88+
- **Decouples sender and receiver**: The client doesn’t need to know which logger will handle the request.
89+
- **Flexible and Scalable**: New log levels can be added without modifying existing code.
90+
- **Improved Maintainability**: Each logger has a single responsibility, making debugging easier.
91+
92+
## **When to Use?**
93+
- When multiple handlers should process a request in sequence.
94+
- When the handler for a request isn’t known beforehand and should be determined dynamically.
95+
- When it is necessary to avoid tight coupling between the request sender and the processing objects.
96+
97+
## **Conclusion**
98+
The Chain of Responsibility pattern is a powerful way to handle requests dynamically. This logging system ensures flexibility, maintainability, and modularity in handling log messages of different severity levels.
99+

05 - Low Level Design/03 - TypeScript Design Pattern/Structural Design Patterns/Proxy/Secure Bank Account/proxy.md renamed to 05 - Low Level Design/03 - TypeScript Design Pattern/Structural Design Patterns/Proxy/Secure Bank Account/README.md

File renamed without changes.

readme.md

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -213,32 +213,28 @@ Understand system design principles and implement design patterns.
213213

214214
### TypeScript Design Patterns
215215

216-
- **Behavioral Design Patterns**
217-
- [Chain of Responsibility (Logging System)](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Chain%20of%20Responsibility%20(Logging%20System).md)
218-
- [Observer Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Observer%20Pattern.md)
219-
- [Strategy Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Design%20Patterns/Strategy%20Pattern.md)
220-
- [State Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/State%20Pattern.md)
221-
- [Command Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Command%20Pattern.md)
222-
- [Iterator Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Iterator%20Pattern.md)
223-
- [Mediator Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Mediator%20Pattern.md)
224-
- [Memento Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Memento%20Pattern.md)
225-
- [Template Method Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Template%20Method%20Pattern.md)
226-
- [Visitor Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Behavioral%20Design%20Patterns/Visitor%20Pattern.md)
227-
228-
- **Creational Design Patterns**
229-
- [Abstract Factory Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Creational%20Design%20Patterns/Abstract%20Factory%20Pattern.md)
230-
- [Builder Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Creational%20Design%20Patterns/Builder%20Pattern.md)
231-
- [Factory Method Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Creational%20Design%20Patterns/Factory%20Method%20Pattern.md)
232-
- [Prototype Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Creational%20Design%20Patterns/Prototype%20Pattern.md)
233-
- [Singleton Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Creational%20Design%20Patterns/Singleton%20Pattern.md)
234-
235-
- **Structural Design Patterns**
236-
- [Adapter Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Adapter%20Pattern.md)
237-
- [Bridge Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Bridge%20Pattern.md)
238-
- [Composite Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Composite%20Pattern.md)
239-
- [Decorator Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Decorator%20Pattern.md)
240-
- [Facade Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Facade%20Pattern.md)
241-
- [Flyweight Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Flyweight%20Pattern.md)
242-
- [Proxy Pattern](05%20-%20Low-Level%20Design/TypeScript%20Design%20Patterns/Structural%20Design%20Patterns/Proxy%20Pattern.md)
216+
<details>
217+
<summary>Behavioral Design Patterns</summary>
218+
219+
- [Chain of Responsibility (Logging System)](./05%20-%20Low%20Level%20Design/03%20-%20TypeScript%20Design%20Pattern/Behavioral%20Design%20Patterns/Chain%20of%20Responsibility/%20Logging%20System/README.md)
220+
</details>
221+
222+
<details>
223+
<summary>Creational Design Patterns</summary>
224+
225+
226+
</details>
227+
228+
229+
<details>
230+
<summary>Structural Design Patterns</summary>
231+
232+
- [Proxy Pattern (Secure Bank Account)](./05%20-%20Low%20Level%20Design/03%20-%20TypeScript%20Design%20Pattern/Structural%20Design%20Patterns/Proxy/Secure%20Bank%20Account/README.md)
233+
</details>
234+
235+
236+
237+
238+
243239

244240

0 commit comments

Comments
 (0)