https://github.com/alideweb/design-patterns-ts
Examples of design patterns and guide how to implement them ;)
https://github.com/alideweb/design-patterns-ts
design-patterns oop oop-in-javascript oop-in-typescript oop-principles ts typescript
Last synced: 9 months ago
JSON representation
Examples of design patterns and guide how to implement them ;)
- Host: GitHub
- URL: https://github.com/alideweb/design-patterns-ts
- Owner: AliDeWeb
- Created: 2025-03-08T14:29:05.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-03-08T15:22:26.000Z (9 months ago)
- Last Synced: 2025-03-08T15:30:47.082Z (9 months ago)
- Topics: design-patterns, oop, oop-in-javascript, oop-in-typescript, oop-principles, ts, typescript
- Language: TypeScript
- Homepage:
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# π¦βπ₯ Design Patterns In TS - Principles and Rules
### By Ali Moradi [AliDeWeb](https://github.com/AliDeWeb)
### Principles of Object-Oriented Programming (OOP):
1. **Encapsulation** β Bundling data and methods within a class while restricting direct access to some details.
2. **Abstraction** β Hiding complex implementation details and exposing only the necessary functionality.
3. **Inheritance** β Allowing a class to inherit properties and behaviors from another class to promote code reuse.
4. **Polymorphism** β Enabling multiple classes to be treated as instances of a common superclass, allowing method overriding and dynamic behavior.
---
### **SOLID Principles:**
1. **Single Responsibility Principle (SRP)** β A class should have only one reason to change, meaning it should have only one responsibility.
2. **Open/Closed Principle (OCP)** β Software entities should be open for extension but closed for modification.
3. **Liskov Substitution Principle (LSP)** β Subtypes must be substitutable for their base types without altering the correctness of the program.
4. **Interface Segregation Principle (ISP)** β Clients should not be forced to depend on interfaces they do not use.
5. **Dependency Inversion Principle (DIP)** β High-level modules should not depend on low-level modules; both should depend on abstractions.
---
### **Other Important Principles:**
Apart from SOLID, other key design principles in OOP include:
- **DRY (Donβt Repeat Yourself)** β Avoid duplication by abstracting reusable code.
- **KISS (Keep It Simple, Stupid)** β Keep code simple and avoid unnecessary complexity.
- **YAGNI (You Ainβt Gonna Need It)** β Donβt implement features unless absolutely necessary.
- **Law of Demeter (LoD)** β Objects should only interact with closely related objects to reduce coupling.
These principles ensure maintainability, scalability, and clean code.
## π Types of Design Patterns
Design patterns are categorized into three main types:
### **1. Behavioral Patterns**
These patterns focus on communication between objects and how they interact with each other.
- **Observer** β Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified.
- **Strategy** β Allows an object to change its behavior dynamically by switching between multiple algorithms.
- **Command** β Encapsulates a request as an object, allowing for parameterization of clients, queuing of requests, and logging of operations.
### **2. Structural Patterns**
These patterns deal with the composition of classes and objects to form larger structures while keeping them flexible and efficient.
- **Adapter** β Bridges the gap between incompatible interfaces.
- **Decorator** β Dynamically extends the functionality of an object without modifying its code.
- **Facade** β Provides a simplified interface to a complex subsystem.
### **3. Creational Patterns**
These patterns focus on object creation mechanisms to increase flexibility and reuse.
- **Factory Method** β Provides an interface for creating objects but allows subclasses to alter the type of objects created.
- **Singleton** β Ensures that a class has only one instance and provides a global point of access to it.
- **Builder** β Allows the step-by-step creation of complex objects, improving readability and maintainability.
## π Patterns
| Design Pattern | Documentation |
| --------------------------- | ------------------------------------------------- |
| **Memento** | [π README](01_Memento/README.md) |
| **State** | [π README](02_State/README.md) |
| **Iterator** | [π README](03_Iterator/README.md) |
| **Strategy** | [π README](04_Strategy/README.md) |
| **Template Method** | [π README](05_Template_Method/README.md) |
| **Command** | [π README](06_Command/README.md) |
| **Observer** | [π README](07_Observer/README.md) |
| **Chain Of Responsibility** | [π README](09_Chain_Of_Responsibility/README.md) |