From a92a975ff5c6eeaed50d34b8777d56b14553576a Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:08:31 +0700 Subject: [PATCH 1/9] Update README --- src/core/concurrency/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/concurrency/README.md b/src/core/concurrency/README.md index 0df32ac..721254d 100644 --- a/src/core/concurrency/README.md +++ b/src/core/concurrency/README.md @@ -9,18 +9,18 @@ ## 2. Thread - Threads are `the basic unit of` multitasking. - There are many errors and risks associated with concurrency, including: - - `Deadlocks`: `refers to the situation where` two or more threads are blocked, `waiting for each other indefinitely`. - - `Race condition`: `refers to the situation where` two or more threads access `shared data` concurrently, leading to the `undefined behavior`. - - `Starvation`: `refer to the situation where` a thread `is unable to gain` regular access to the shared resources. + - `Deadlocks`: `refers to the situation where` two or more threads are blocked, `waiting for each other indefinitely`. + - `Race condition`: `refers to the situation where` two or more threads access `shared data` concurrently, leading to the `undefined behavior`. + - `Starvation`: `refer to the situation where` a thread `is unable to gain` regular access to the shared resources. => We can avoid these problems by `proper synchronization` between the threads. - Use threads if we need to run long-lived and complex tasks. ### 2.2. Thead Synchronization - The synchronization can be done by using the following components: - - `Mutex/Lock`: they are used to protect the shared resouces, ensure that only one thread can access `the critical sections` at a time. - - `Semaphore`: - - `Futures and Promises`: , are used for the asynchronous task execution. - - `Condition variable`: + - `Mutex/Lock`: `` they are used to protect the shared resouces, ensure that only one thread can access `the critical sections` at a time. + - `Semaphore`: + - `Futures and Promises`: ``, `` are used for the asynchronous task execution. + - `Condition variable`: `` ### 2.3. Thread Management - `thread`: an `OS thread` `managed by` the kernel. From c3a3d1ae8a6d5321a9471210beb73252ae45f435 Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:30:30 +0700 Subject: [PATCH 2/9] Refactoring DS --- .../behavioral_CoR.drawio.svg} | 0 .../behavioral_command.drawio.svg} | 0 .../behavioral_iterator.drawio.svg} | 0 .../behavioral_mediator.drawio.svg} | 0 .../behavioral_memento.drawio.svg} | 0 .../behavioral_observer.drawio.svg} | 0 .../behavioral_state.drawio.svg} | 0 .../behavioral_strategy.drawio.svg} | 0 .../behavioral_templatemethod.drawio.svg} | 0 .../behavioral_visitor.drawio.svg} | 0 .../creational_abstractfactory.drawio.svg} | 0 .../creational_builder.drawio.svg} | 0 .../creational_factorymethod.drawio.svg} | 0 .../creational_prototype.drawio.svg} | 0 .../creational_singleton.drawio.svg} | 0 .../structural_adapter.drawio.svg} | 0 .../structural_bridge.drawio.svg} | 0 .../structural_composite.drawio.svg} | 0 .../structural_decorator.drawio.svg} | 0 .../structural_facade.drawio.svg} | 0 .../structural_flyweight.drawio.svg} | 0 .../structural_proxy.drawio.svg} | 0 src/CMakeLists.txt | 2 +- src/{patterns => ds}/CMakeLists.txt | 0 .../behavioral/ChainOfCommand.cpp | 0 src/{patterns => ds}/behavioral/Command.cpp | 0 src/{patterns => ds}/behavioral/Iterator.cpp | 0 src/{patterns => ds}/behavioral/Mediator.cpp | 0 src/{patterns => ds}/behavioral/Memento.cpp | 0 src/{patterns => ds}/behavioral/Observer.cpp | 0 src/{patterns => ds}/behavioral/README.md | 40 +++++++++---------- src/{patterns => ds}/behavioral/State.cpp | 0 src/{patterns => ds}/behavioral/Strategy.cpp | 0 .../behavioral/TemplateMethod.cpp | 0 src/{patterns => ds}/behavioral/Visitor.cpp | 0 .../creational/AbstractFactory.cpp | 0 src/{patterns => ds}/creational/Builder.cpp | 0 .../creational/FactoryMethod.cpp | 0 src/{patterns => ds}/creational/Prototype.cpp | 0 src/{patterns => ds}/creational/README.md | 20 +++++----- src/{patterns => ds}/creational/Singleton.cpp | 0 src/{patterns => ds}/structural/Adapter.cpp | 0 src/{patterns => ds}/structural/Bridge.cpp | 0 src/{patterns => ds}/structural/Composite.cpp | 0 src/{patterns => ds}/structural/Decorator.cpp | 0 src/{patterns => ds}/structural/Facade.cpp | 0 src/{patterns => ds}/structural/Flyweight.cpp | 0 src/{patterns => ds}/structural/Proxy.cpp | 0 src/{patterns => ds}/structural/README.md | 28 ++++++------- 49 files changed, 45 insertions(+), 45 deletions(-) rename docs/uml/{patterns_behavioral_CoR.drawio.svg => ds/behavioral_CoR.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_command.drawio.svg => ds/behavioral_command.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_iterator.drawio.svg => ds/behavioral_iterator.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_mediator.drawio.svg => ds/behavioral_mediator.drawio.svg} (100%) rename docs/uml/{patterns_structural_memento.drawio.svg => ds/behavioral_memento.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_observer.drawio.svg => ds/behavioral_observer.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_state.drawio.svg => ds/behavioral_state.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_strategy.drawio.svg => ds/behavioral_strategy.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_templatemethod.drawio.svg => ds/behavioral_templatemethod.drawio.svg} (100%) rename docs/uml/{patterns_behavioral_visitor.drawio.svg => ds/behavioral_visitor.drawio.svg} (100%) rename docs/uml/{patterns_creational_abstractfactory.drawio.svg => ds/creational_abstractfactory.drawio.svg} (100%) rename docs/uml/{patterns_creational_builder.drawio.svg => ds/creational_builder.drawio.svg} (100%) rename docs/uml/{patterns_creational_factorymethod.drawio.svg => ds/creational_factorymethod.drawio.svg} (100%) rename docs/uml/{patterns_creational_prototype.drawio.svg => ds/creational_prototype.drawio.svg} (100%) rename docs/uml/{patterns_creational_singleton.drawio.svg => ds/creational_singleton.drawio.svg} (100%) rename docs/uml/{patterns_structural_adapter.drawio.svg => ds/structural_adapter.drawio.svg} (100%) rename docs/uml/{patterns_structural_bridge.drawio.svg => ds/structural_bridge.drawio.svg} (100%) rename docs/uml/{patterns_structural_composite.drawio.svg => ds/structural_composite.drawio.svg} (100%) rename docs/uml/{patterns_structural_decorator.drawio.svg => ds/structural_decorator.drawio.svg} (100%) rename docs/uml/{patterns_structural_facade.drawio.svg => ds/structural_facade.drawio.svg} (100%) rename docs/uml/{patterns_structural_flyweight.drawio.svg => ds/structural_flyweight.drawio.svg} (100%) rename docs/uml/{patterns_structural_proxy.drawio.svg => ds/structural_proxy.drawio.svg} (100%) rename src/{patterns => ds}/CMakeLists.txt (100%) rename src/{patterns => ds}/behavioral/ChainOfCommand.cpp (100%) rename src/{patterns => ds}/behavioral/Command.cpp (100%) rename src/{patterns => ds}/behavioral/Iterator.cpp (100%) rename src/{patterns => ds}/behavioral/Mediator.cpp (100%) rename src/{patterns => ds}/behavioral/Memento.cpp (100%) rename src/{patterns => ds}/behavioral/Observer.cpp (100%) rename src/{patterns => ds}/behavioral/README.md (80%) rename src/{patterns => ds}/behavioral/State.cpp (100%) rename src/{patterns => ds}/behavioral/Strategy.cpp (100%) rename src/{patterns => ds}/behavioral/TemplateMethod.cpp (100%) rename src/{patterns => ds}/behavioral/Visitor.cpp (100%) rename src/{patterns => ds}/creational/AbstractFactory.cpp (100%) rename src/{patterns => ds}/creational/Builder.cpp (100%) rename src/{patterns => ds}/creational/FactoryMethod.cpp (100%) rename src/{patterns => ds}/creational/Prototype.cpp (100%) rename src/{patterns => ds}/creational/README.md (82%) rename src/{patterns => ds}/creational/Singleton.cpp (100%) rename src/{patterns => ds}/structural/Adapter.cpp (100%) rename src/{patterns => ds}/structural/Bridge.cpp (100%) rename src/{patterns => ds}/structural/Composite.cpp (100%) rename src/{patterns => ds}/structural/Decorator.cpp (100%) rename src/{patterns => ds}/structural/Facade.cpp (100%) rename src/{patterns => ds}/structural/Flyweight.cpp (100%) rename src/{patterns => ds}/structural/Proxy.cpp (100%) rename src/{patterns => ds}/structural/README.md (81%) diff --git a/docs/uml/patterns_behavioral_CoR.drawio.svg b/docs/uml/ds/behavioral_CoR.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_CoR.drawio.svg rename to docs/uml/ds/behavioral_CoR.drawio.svg diff --git a/docs/uml/patterns_behavioral_command.drawio.svg b/docs/uml/ds/behavioral_command.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_command.drawio.svg rename to docs/uml/ds/behavioral_command.drawio.svg diff --git a/docs/uml/patterns_behavioral_iterator.drawio.svg b/docs/uml/ds/behavioral_iterator.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_iterator.drawio.svg rename to docs/uml/ds/behavioral_iterator.drawio.svg diff --git a/docs/uml/patterns_behavioral_mediator.drawio.svg b/docs/uml/ds/behavioral_mediator.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_mediator.drawio.svg rename to docs/uml/ds/behavioral_mediator.drawio.svg diff --git a/docs/uml/patterns_structural_memento.drawio.svg b/docs/uml/ds/behavioral_memento.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_memento.drawio.svg rename to docs/uml/ds/behavioral_memento.drawio.svg diff --git a/docs/uml/patterns_behavioral_observer.drawio.svg b/docs/uml/ds/behavioral_observer.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_observer.drawio.svg rename to docs/uml/ds/behavioral_observer.drawio.svg diff --git a/docs/uml/patterns_behavioral_state.drawio.svg b/docs/uml/ds/behavioral_state.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_state.drawio.svg rename to docs/uml/ds/behavioral_state.drawio.svg diff --git a/docs/uml/patterns_behavioral_strategy.drawio.svg b/docs/uml/ds/behavioral_strategy.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_strategy.drawio.svg rename to docs/uml/ds/behavioral_strategy.drawio.svg diff --git a/docs/uml/patterns_behavioral_templatemethod.drawio.svg b/docs/uml/ds/behavioral_templatemethod.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_templatemethod.drawio.svg rename to docs/uml/ds/behavioral_templatemethod.drawio.svg diff --git a/docs/uml/patterns_behavioral_visitor.drawio.svg b/docs/uml/ds/behavioral_visitor.drawio.svg similarity index 100% rename from docs/uml/patterns_behavioral_visitor.drawio.svg rename to docs/uml/ds/behavioral_visitor.drawio.svg diff --git a/docs/uml/patterns_creational_abstractfactory.drawio.svg b/docs/uml/ds/creational_abstractfactory.drawio.svg similarity index 100% rename from docs/uml/patterns_creational_abstractfactory.drawio.svg rename to docs/uml/ds/creational_abstractfactory.drawio.svg diff --git a/docs/uml/patterns_creational_builder.drawio.svg b/docs/uml/ds/creational_builder.drawio.svg similarity index 100% rename from docs/uml/patterns_creational_builder.drawio.svg rename to docs/uml/ds/creational_builder.drawio.svg diff --git a/docs/uml/patterns_creational_factorymethod.drawio.svg b/docs/uml/ds/creational_factorymethod.drawio.svg similarity index 100% rename from docs/uml/patterns_creational_factorymethod.drawio.svg rename to docs/uml/ds/creational_factorymethod.drawio.svg diff --git a/docs/uml/patterns_creational_prototype.drawio.svg b/docs/uml/ds/creational_prototype.drawio.svg similarity index 100% rename from docs/uml/patterns_creational_prototype.drawio.svg rename to docs/uml/ds/creational_prototype.drawio.svg diff --git a/docs/uml/patterns_creational_singleton.drawio.svg b/docs/uml/ds/creational_singleton.drawio.svg similarity index 100% rename from docs/uml/patterns_creational_singleton.drawio.svg rename to docs/uml/ds/creational_singleton.drawio.svg diff --git a/docs/uml/patterns_structural_adapter.drawio.svg b/docs/uml/ds/structural_adapter.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_adapter.drawio.svg rename to docs/uml/ds/structural_adapter.drawio.svg diff --git a/docs/uml/patterns_structural_bridge.drawio.svg b/docs/uml/ds/structural_bridge.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_bridge.drawio.svg rename to docs/uml/ds/structural_bridge.drawio.svg diff --git a/docs/uml/patterns_structural_composite.drawio.svg b/docs/uml/ds/structural_composite.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_composite.drawio.svg rename to docs/uml/ds/structural_composite.drawio.svg diff --git a/docs/uml/patterns_structural_decorator.drawio.svg b/docs/uml/ds/structural_decorator.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_decorator.drawio.svg rename to docs/uml/ds/structural_decorator.drawio.svg diff --git a/docs/uml/patterns_structural_facade.drawio.svg b/docs/uml/ds/structural_facade.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_facade.drawio.svg rename to docs/uml/ds/structural_facade.drawio.svg diff --git a/docs/uml/patterns_structural_flyweight.drawio.svg b/docs/uml/ds/structural_flyweight.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_flyweight.drawio.svg rename to docs/uml/ds/structural_flyweight.drawio.svg diff --git a/docs/uml/patterns_structural_proxy.drawio.svg b/docs/uml/ds/structural_proxy.drawio.svg similarity index 100% rename from docs/uml/patterns_structural_proxy.drawio.svg rename to docs/uml/ds/structural_proxy.drawio.svg diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index faafbfb..5cb1c05 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,7 @@ # Add project submodules add_subdirectory(core) add_subdirectory(controller) -add_subdirectory(patterns) +add_subdirectory(ds) add_subdirectory(socket) add_subdirectory(excercise) diff --git a/src/patterns/CMakeLists.txt b/src/ds/CMakeLists.txt similarity index 100% rename from src/patterns/CMakeLists.txt rename to src/ds/CMakeLists.txt diff --git a/src/patterns/behavioral/ChainOfCommand.cpp b/src/ds/behavioral/ChainOfCommand.cpp similarity index 100% rename from src/patterns/behavioral/ChainOfCommand.cpp rename to src/ds/behavioral/ChainOfCommand.cpp diff --git a/src/patterns/behavioral/Command.cpp b/src/ds/behavioral/Command.cpp similarity index 100% rename from src/patterns/behavioral/Command.cpp rename to src/ds/behavioral/Command.cpp diff --git a/src/patterns/behavioral/Iterator.cpp b/src/ds/behavioral/Iterator.cpp similarity index 100% rename from src/patterns/behavioral/Iterator.cpp rename to src/ds/behavioral/Iterator.cpp diff --git a/src/patterns/behavioral/Mediator.cpp b/src/ds/behavioral/Mediator.cpp similarity index 100% rename from src/patterns/behavioral/Mediator.cpp rename to src/ds/behavioral/Mediator.cpp diff --git a/src/patterns/behavioral/Memento.cpp b/src/ds/behavioral/Memento.cpp similarity index 100% rename from src/patterns/behavioral/Memento.cpp rename to src/ds/behavioral/Memento.cpp diff --git a/src/patterns/behavioral/Observer.cpp b/src/ds/behavioral/Observer.cpp similarity index 100% rename from src/patterns/behavioral/Observer.cpp rename to src/ds/behavioral/Observer.cpp diff --git a/src/patterns/behavioral/README.md b/src/ds/behavioral/README.md similarity index 80% rename from src/patterns/behavioral/README.md rename to src/ds/behavioral/README.md index 47dcbb3..65b8bc0 100644 --- a/src/patterns/behavioral/README.md +++ b/src/ds/behavioral/README.md @@ -4,8 +4,8 @@ Behavioral design patterns are concerned with algorithms and the assignment of r --- -## Chain of Responsibility - +## 1. Chain of Responsibility +![Diagram](../../../docs/uml/ds/behavioral_CoR.drawio.svg) **Chain of Responsibility** Lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain. @@ -14,8 +14,8 @@ Customer support tickets in a company. Simple requests go to the first-level sup --- -## Command - +## 2. Command +![Diagram](../../../docs/uml/ds/behavioral_command.drawio.svg) **Command** Turns a request into a stand-alone object that contains all information about the request. This lets you pass requests as arguments, delay or queue execution, and support undo operations. @@ -24,8 +24,8 @@ Using a remote control for smart home devices. Each button press represents a co --- -## Iterator - +## 3. Iterator +![Diagram](../../../docs/uml/ds/behavioral_iterator.drawio.svg) **Iterator** Lets you traverse elements of a collection without exposing its underlying representation (list, stack, tree, etc.). @@ -34,8 +34,8 @@ Browsing a photo gallery app. You can swipe left or right to view photos without --- -## Mediator - +## 4. Mediator +![Diagram](../../../docs/uml/ds/behavioral_mediator.drawio.svg) **Mediator** Reduces chaotic dependencies between objects by forcing them to communicate through a mediator. @@ -44,8 +44,8 @@ An air traffic control tower. Planes don’t communicate directly with each othe --- -## Memento - +## 5. Memento +![Diagram](../../../docs/uml/ds/behavioral_memento.drawio.svg) **Memento** Lets you save and restore the previous state of an object without revealing its implementation details. @@ -54,8 +54,8 @@ The “Undo” feature in a text editor. You can revert to a previous version of --- -## Observer - +## 6. Observer +![Diagram](../../../docs/uml/ds/behavioral_observer.drawio.svg) **Observer** Defines a subscription mechanism to notify multiple objects about events happening to the object they’re observing. @@ -64,8 +64,8 @@ Social media notifications. When someone posts a new photo, all their followers --- -## State - +## 7. State +![Diagram](../../../docs/uml/ds/behavioral_state.drawio.svg) **State** Lets an object alter its behavior when its internal state changes, making it appear as if the object changed its class. @@ -74,8 +74,8 @@ A traffic light. Its behavior (red, yellow, green) changes automatically dependi --- -## Strategy - +## 8. Strategy +![Diagram](../../../docs/uml/ds/behavioral_strategy.drawio.svg) **Strategy** Defines a family of algorithms, puts each into a separate class, and makes them interchangeable. @@ -84,8 +84,8 @@ A navigation app lets you choose between driving, walking, or cycling routes. Ea --- -## Template Method - +## 9. Template Method +![Diagram](../../../docs/uml/ds/behavioral_templatemethod.drawio.svg) **Template Method** Defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps without changing its structure. @@ -94,8 +94,8 @@ Making coffee or tea in a café. The steps (boil water, pour, serve) are the sam --- -## Visitor - +## 10. Visitor +![Diagram](../../../docs/uml/ds/behavioral_visitor.drawio.svg) **Visitor** Lets you separate algorithms from the objects on which they operate. diff --git a/src/patterns/behavioral/State.cpp b/src/ds/behavioral/State.cpp similarity index 100% rename from src/patterns/behavioral/State.cpp rename to src/ds/behavioral/State.cpp diff --git a/src/patterns/behavioral/Strategy.cpp b/src/ds/behavioral/Strategy.cpp similarity index 100% rename from src/patterns/behavioral/Strategy.cpp rename to src/ds/behavioral/Strategy.cpp diff --git a/src/patterns/behavioral/TemplateMethod.cpp b/src/ds/behavioral/TemplateMethod.cpp similarity index 100% rename from src/patterns/behavioral/TemplateMethod.cpp rename to src/ds/behavioral/TemplateMethod.cpp diff --git a/src/patterns/behavioral/Visitor.cpp b/src/ds/behavioral/Visitor.cpp similarity index 100% rename from src/patterns/behavioral/Visitor.cpp rename to src/ds/behavioral/Visitor.cpp diff --git a/src/patterns/creational/AbstractFactory.cpp b/src/ds/creational/AbstractFactory.cpp similarity index 100% rename from src/patterns/creational/AbstractFactory.cpp rename to src/ds/creational/AbstractFactory.cpp diff --git a/src/patterns/creational/Builder.cpp b/src/ds/creational/Builder.cpp similarity index 100% rename from src/patterns/creational/Builder.cpp rename to src/ds/creational/Builder.cpp diff --git a/src/patterns/creational/FactoryMethod.cpp b/src/ds/creational/FactoryMethod.cpp similarity index 100% rename from src/patterns/creational/FactoryMethod.cpp rename to src/ds/creational/FactoryMethod.cpp diff --git a/src/patterns/creational/Prototype.cpp b/src/ds/creational/Prototype.cpp similarity index 100% rename from src/patterns/creational/Prototype.cpp rename to src/ds/creational/Prototype.cpp diff --git a/src/patterns/creational/README.md b/src/ds/creational/README.md similarity index 82% rename from src/patterns/creational/README.md rename to src/ds/creational/README.md index cc89aa1..a6c0492 100644 --- a/src/patterns/creational/README.md +++ b/src/ds/creational/README.md @@ -4,8 +4,8 @@ Creational design patterns provide various object creation mechanisms, which inc --- -## Factory Method - +## 1. Factory Method +![Diagram](../../../docs/uml/ds/creational_factorymethod.drawio.svg) **Factory Method** Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. @@ -14,8 +14,8 @@ A ride-hailing app can create different types of rides: economy, premium, or SUV --- -## Abstract Factory - +## 2. Abstract Factory +![Diagram](../../../docs/uml/ds/creational_abstractfactory.drawio.svg) **Abstract Factory** Lets you produce families of related objects without specifying their concrete classes. @@ -24,8 +24,8 @@ A furniture store app that sells sets of furniture. If a customer chooses a "Mod --- -## Builder - +## 3. Builder +![Diagram](../../../docs/uml/ds/creational_builder.drawio.svg) **Builder** Lets you construct complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code. @@ -34,8 +34,8 @@ Ordering a custom pizza online. You can choose the dough, sauce, toppings, and s --- -## Prototype - +## 4. Prototype +![Diagram](../../../docs/uml/ds/creational_prototype.drawio.svg) **Prototype** Lets you copy existing objects without making your code dependent on their classes. @@ -44,8 +44,8 @@ Copying a template for a new document in Google Docs. Instead of creating a docu --- -## Singleton - +## 5. Singleton +![Diagram](../../../docs/uml/ds/creational_singleton.drawio.svg) **Singleton** Lets you ensure that a class has only one instance, while providing a global access point to this instance. diff --git a/src/patterns/creational/Singleton.cpp b/src/ds/creational/Singleton.cpp similarity index 100% rename from src/patterns/creational/Singleton.cpp rename to src/ds/creational/Singleton.cpp diff --git a/src/patterns/structural/Adapter.cpp b/src/ds/structural/Adapter.cpp similarity index 100% rename from src/patterns/structural/Adapter.cpp rename to src/ds/structural/Adapter.cpp diff --git a/src/patterns/structural/Bridge.cpp b/src/ds/structural/Bridge.cpp similarity index 100% rename from src/patterns/structural/Bridge.cpp rename to src/ds/structural/Bridge.cpp diff --git a/src/patterns/structural/Composite.cpp b/src/ds/structural/Composite.cpp similarity index 100% rename from src/patterns/structural/Composite.cpp rename to src/ds/structural/Composite.cpp diff --git a/src/patterns/structural/Decorator.cpp b/src/ds/structural/Decorator.cpp similarity index 100% rename from src/patterns/structural/Decorator.cpp rename to src/ds/structural/Decorator.cpp diff --git a/src/patterns/structural/Facade.cpp b/src/ds/structural/Facade.cpp similarity index 100% rename from src/patterns/structural/Facade.cpp rename to src/ds/structural/Facade.cpp diff --git a/src/patterns/structural/Flyweight.cpp b/src/ds/structural/Flyweight.cpp similarity index 100% rename from src/patterns/structural/Flyweight.cpp rename to src/ds/structural/Flyweight.cpp diff --git a/src/patterns/structural/Proxy.cpp b/src/ds/structural/Proxy.cpp similarity index 100% rename from src/patterns/structural/Proxy.cpp rename to src/ds/structural/Proxy.cpp diff --git a/src/patterns/structural/README.md b/src/ds/structural/README.md similarity index 81% rename from src/patterns/structural/README.md rename to src/ds/structural/README.md index a630b45..cb99f74 100644 --- a/src/patterns/structural/README.md +++ b/src/ds/structural/README.md @@ -4,8 +4,8 @@ Structural design patterns explain how to assemble objects and classes into larg --- -## Adapter - +## 1. Adapter +![Diagram](../../../docs/uml/ds/structural_adapter.drawio.svg) **Adapter** Allows objects with incompatible interfaces to collaborate. @@ -14,8 +14,8 @@ A travel power adapter. You plug a device from one country into a socket in anot --- -## Bridge - +## 2. Bridge +![Diagram](../../../docs/uml/ds/structural_bridge.drawio.svg) **Bridge** Lets you split a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently. @@ -24,8 +24,8 @@ A remote control system. The remote (abstraction) can control different devices --- -## Composite - +## 3. Composite +![Diagram](../../../docs/uml/ds/structural_composite.drawio.svg) **Composite** Lets you compose objects into tree structures and then work with these structures as if they were individual objects. @@ -34,8 +34,8 @@ A company organizational chart. Managers and employees are treated uniformly. A --- -## Decorator - +## 4. Decorator +![Diagram](../../../docs/uml/ds/structural_decorator.drawio.svg) **Decorator** Lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors. @@ -44,8 +44,8 @@ Adding extra features to a coffee order. You start with a plain coffee and decor --- -## Facade - +## 5. Facade +![Diagram](../../../docs/uml/ds/structural_facade.drawio.svg) **Facade** Provides a simplified interface to a library, a framework, or any other complex set of classes. @@ -54,8 +54,8 @@ A home automation app. Instead of controlling lights, thermostat, and security s --- -## Flyweight - +## 6. Flyweight +![Diagram](../../../docs/uml/ds/structural_flyweight.drawio.svg) **Flyweight** Lets you fit more objects into available memory by sharing common parts of state between multiple objects. @@ -64,8 +64,8 @@ In a word processor, the same font style and size is shared across multiple char --- -## Proxy - +## 7. Proxy +![Diagram](../../../docs/uml/ds/structural_proxy.drawio.svg) **Proxy** Lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something before or after the request reaches the original object. From d743461cc78d18176b8a945ad23d35de0a641b5f Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:33:49 +0700 Subject: [PATCH 3/9] Update group name with prefix - ds --- src/ds/behavioral/ChainOfCommand.cpp | 4 ++-- src/ds/behavioral/Command.cpp | 4 ++-- src/ds/behavioral/Iterator.cpp | 4 ++-- src/ds/behavioral/Mediator.cpp | 4 ++-- src/ds/behavioral/Memento.cpp | 4 ++-- src/ds/behavioral/Observer.cpp | 4 ++-- src/ds/behavioral/State.cpp | 4 ++-- src/ds/behavioral/Strategy.cpp | 4 ++-- src/ds/behavioral/TemplateMethod.cpp | 4 ++-- src/ds/behavioral/Visitor.cpp | 4 ++-- src/ds/creational/AbstractFactory.cpp | 4 ++-- src/ds/creational/Builder.cpp | 4 ++-- src/ds/creational/FactoryMethod.cpp | 4 ++-- src/ds/creational/Prototype.cpp | 4 ++-- src/ds/creational/Singleton.cpp | 4 ++-- src/ds/structural/Adapter.cpp | 4 ++-- src/ds/structural/Bridge.cpp | 4 ++-- src/ds/structural/Composite.cpp | 4 ++-- src/ds/structural/Decorator.cpp | 4 ++-- src/ds/structural/Facade.cpp | 4 ++-- src/ds/structural/Flyweight.cpp | 4 ++-- src/ds/structural/Proxy.cpp | 4 ++-- 22 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/ds/behavioral/ChainOfCommand.cpp b/src/ds/behavioral/ChainOfCommand.cpp index fca6de1..59093da 100644 --- a/src/ds/behavioral/ChainOfCommand.cpp +++ b/src/ds/behavioral/ChainOfCommand.cpp @@ -138,11 +138,11 @@ void run() { class ChainOfResponsibilityExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "ChainOfResponsibility"; } std::string description() const override { return "CoR Pattern Example"; } void execute() override { CoR::run(); } }; -REGISTER_EXAMPLE(ChainOfResponsibilityExample, "patterns/behavioral", +REGISTER_EXAMPLE(ChainOfResponsibilityExample, "ds/behavioral", "ChainOfResponsibility"); \ No newline at end of file diff --git a/src/ds/behavioral/Command.cpp b/src/ds/behavioral/Command.cpp index 240c4b7..f6f47fc 100644 --- a/src/ds/behavioral/Command.cpp +++ b/src/ds/behavioral/Command.cpp @@ -129,10 +129,10 @@ void run() { class CommandExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Command"; } std::string description() const override { return "Command Pattern Example"; } void execute() override { Command::run(); } }; -REGISTER_EXAMPLE(CommandExample, "patterns/behavioral", "Command"); \ No newline at end of file +REGISTER_EXAMPLE(CommandExample, "ds/behavioral", "Command"); \ No newline at end of file diff --git a/src/ds/behavioral/Iterator.cpp b/src/ds/behavioral/Iterator.cpp index cd085f7..96866d9 100644 --- a/src/ds/behavioral/Iterator.cpp +++ b/src/ds/behavioral/Iterator.cpp @@ -200,7 +200,7 @@ void run() { class IteratorExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Iterator"; } std::string description() const override { return "Iterator Pattern Example"; @@ -208,4 +208,4 @@ class IteratorExample : public IExample { void execute() override { Iterator::run(); } }; -REGISTER_EXAMPLE(IteratorExample, "patterns/behavioral", "Iterator"); \ No newline at end of file +REGISTER_EXAMPLE(IteratorExample, "ds/behavioral", "Iterator"); \ No newline at end of file diff --git a/src/ds/behavioral/Mediator.cpp b/src/ds/behavioral/Mediator.cpp index 1bb8e96..e1ec125 100644 --- a/src/ds/behavioral/Mediator.cpp +++ b/src/ds/behavioral/Mediator.cpp @@ -166,7 +166,7 @@ void run() { class MediatorExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Mediator"; } std::string description() const override { return "Mediator Pattern Example"; @@ -174,4 +174,4 @@ class MediatorExample : public IExample { void execute() override { Mediator::run(); } }; -REGISTER_EXAMPLE(MediatorExample, "patterns/behavioral", "Mediator"); \ No newline at end of file +REGISTER_EXAMPLE(MediatorExample, "ds/behavioral", "Mediator"); \ No newline at end of file diff --git a/src/ds/behavioral/Memento.cpp b/src/ds/behavioral/Memento.cpp index 0eedf6e..5cf3e75 100644 --- a/src/ds/behavioral/Memento.cpp +++ b/src/ds/behavioral/Memento.cpp @@ -195,7 +195,7 @@ void run() { class MementoExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Memento"; } std::string description() const override { return "Memento Pattern Example "; @@ -203,4 +203,4 @@ class MementoExample : public IExample { void execute() override { Memento::run(); } }; -REGISTER_EXAMPLE(MementoExample, "patterns/behavioral", "Memento"); \ No newline at end of file +REGISTER_EXAMPLE(MementoExample, "ds/behavioral", "Memento"); \ No newline at end of file diff --git a/src/ds/behavioral/Observer.cpp b/src/ds/behavioral/Observer.cpp index decb5e5..c073cf9 100644 --- a/src/ds/behavioral/Observer.cpp +++ b/src/ds/behavioral/Observer.cpp @@ -179,7 +179,7 @@ void run() { class ObserverExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Observer"; } std::string description() const override { return "Observer Pattern Example"; @@ -187,4 +187,4 @@ class ObserverExample : public IExample { void execute() override { Observer::run(); } }; -REGISTER_EXAMPLE(ObserverExample, "patterns/behavioral", "Observer"); \ No newline at end of file +REGISTER_EXAMPLE(ObserverExample, "ds/behavioral", "Observer"); \ No newline at end of file diff --git a/src/ds/behavioral/State.cpp b/src/ds/behavioral/State.cpp index 05fb9a5..9d055e9 100644 --- a/src/ds/behavioral/State.cpp +++ b/src/ds/behavioral/State.cpp @@ -136,10 +136,10 @@ void run() { class StateExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "State"; } std::string description() const override { return "State Pattern Example"; } void execute() override { State::run(); } }; -REGISTER_EXAMPLE(StateExample, "patterns/behavioral", "State"); \ No newline at end of file +REGISTER_EXAMPLE(StateExample, "ds/behavioral", "State"); \ No newline at end of file diff --git a/src/ds/behavioral/Strategy.cpp b/src/ds/behavioral/Strategy.cpp index a929389..6bf113a 100644 --- a/src/ds/behavioral/Strategy.cpp +++ b/src/ds/behavioral/Strategy.cpp @@ -105,7 +105,7 @@ void run() { class StrategyExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Strategy"; } std::string description() const override { return "Strategy Pattern Example"; @@ -113,4 +113,4 @@ class StrategyExample : public IExample { void execute() override { Strategy::run(); } }; -REGISTER_EXAMPLE(StrategyExample, "patterns/behavioral", "Strategy"); \ No newline at end of file +REGISTER_EXAMPLE(StrategyExample, "ds/behavioral", "Strategy"); \ No newline at end of file diff --git a/src/ds/behavioral/TemplateMethod.cpp b/src/ds/behavioral/TemplateMethod.cpp index 0cdcdf6..bc7ebb3 100644 --- a/src/ds/behavioral/TemplateMethod.cpp +++ b/src/ds/behavioral/TemplateMethod.cpp @@ -107,7 +107,7 @@ void run() { class TemplateMethodExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "TemplateMethod"; } std::string description() const override { return "TemplateMethod Pattern Example"; @@ -115,4 +115,4 @@ class TemplateMethodExample : public IExample { void execute() override { TemplateMethod::run(); } }; -REGISTER_EXAMPLE(TemplateMethodExample, "patterns/behavioral", "TemplateMethod"); \ No newline at end of file +REGISTER_EXAMPLE(TemplateMethodExample, "ds/behavioral", "TemplateMethod"); \ No newline at end of file diff --git a/src/ds/behavioral/Visitor.cpp b/src/ds/behavioral/Visitor.cpp index ea11a59..6c1b19a 100644 --- a/src/ds/behavioral/Visitor.cpp +++ b/src/ds/behavioral/Visitor.cpp @@ -240,10 +240,10 @@ void run() { class VisitorExample : public IExample { public: - std::string group() const override { return "patterns/behavioral"; } + std::string group() const override { return "ds/behavioral"; } std::string name() const override { return "Visitor"; } std::string description() const override { return "Visitor Pattern Example"; } void execute() override { Visitor::run(); } }; -REGISTER_EXAMPLE(VisitorExample, "patterns/behavioral", "Visitor"); \ No newline at end of file +REGISTER_EXAMPLE(VisitorExample, "ds/behavioral", "Visitor"); \ No newline at end of file diff --git a/src/ds/creational/AbstractFactory.cpp b/src/ds/creational/AbstractFactory.cpp index b78653a..43323ab 100644 --- a/src/ds/creational/AbstractFactory.cpp +++ b/src/ds/creational/AbstractFactory.cpp @@ -167,7 +167,7 @@ void run() { class AbstractFactoryExample : public IExample { public: - std::string group() const override { return "patterns/creational"; } + std::string group() const override { return "ds/creational"; } std::string name() const override { return "AbstractFactory"; } std::string description() const override { return "AbstractFactory Pattern Example"; @@ -175,4 +175,4 @@ class AbstractFactoryExample : public IExample { void execute() override { AbstractFactory::run(); } }; -REGISTER_EXAMPLE(AbstractFactoryExample, "patterns/creational", "AbstractFactory"); \ No newline at end of file +REGISTER_EXAMPLE(AbstractFactoryExample, "ds/creational", "AbstractFactory"); \ No newline at end of file diff --git a/src/ds/creational/Builder.cpp b/src/ds/creational/Builder.cpp index 46ed44f..ad1b653 100644 --- a/src/ds/creational/Builder.cpp +++ b/src/ds/creational/Builder.cpp @@ -165,10 +165,10 @@ void run() { class BuilderExample : public IExample { public: - std::string group() const override { return "patterns/creational"; } + std::string group() const override { return "ds/creational"; } std::string name() const override { return "Builder"; } std::string description() const override { return "Builder Pattern Example"; } void execute() override { BuilderPattern::run(); } }; -REGISTER_EXAMPLE(BuilderExample, "patterns/creational", "Builder"); \ No newline at end of file +REGISTER_EXAMPLE(BuilderExample, "ds/creational", "Builder"); \ No newline at end of file diff --git a/src/ds/creational/FactoryMethod.cpp b/src/ds/creational/FactoryMethod.cpp index 80dc69f..500aabd 100644 --- a/src/ds/creational/FactoryMethod.cpp +++ b/src/ds/creational/FactoryMethod.cpp @@ -134,7 +134,7 @@ void run() { class FactoryMethodExample : public IExample { public: - std::string group() const override { return "patterns/creational"; } + std::string group() const override { return "ds/creational"; } std::string name() const override { return "FactoryMethod"; } std::string description() const override { return "FactoryMethod Pattern Example"; @@ -142,4 +142,4 @@ class FactoryMethodExample : public IExample { void execute() override { FactoryMethod::run(); } }; -REGISTER_EXAMPLE(FactoryMethodExample, "patterns/creational", "FactoryMethod"); \ No newline at end of file +REGISTER_EXAMPLE(FactoryMethodExample, "ds/creational", "FactoryMethod"); \ No newline at end of file diff --git a/src/ds/creational/Prototype.cpp b/src/ds/creational/Prototype.cpp index 8fd289c..17e7361 100644 --- a/src/ds/creational/Prototype.cpp +++ b/src/ds/creational/Prototype.cpp @@ -121,7 +121,7 @@ void run() { class PrototypeExample : public IExample { public: - std::string group() const override { return "patterns/creational"; } + std::string group() const override { return "ds/creational"; } std::string name() const override { return "Prototype"; } std::string description() const override { return "Prototype Pattern Example"; @@ -129,4 +129,4 @@ class PrototypeExample : public IExample { void execute() override { Prototy::run(); } }; -REGISTER_EXAMPLE(PrototypeExample, "patterns/creational", "Prototype"); \ No newline at end of file +REGISTER_EXAMPLE(PrototypeExample, "ds/creational", "Prototype"); \ No newline at end of file diff --git a/src/ds/creational/Singleton.cpp b/src/ds/creational/Singleton.cpp index 65e845e..f6621f0 100644 --- a/src/ds/creational/Singleton.cpp +++ b/src/ds/creational/Singleton.cpp @@ -74,7 +74,7 @@ void run() { class SingletonExample : public IExample { public: - std::string group() const override { return "patterns/creational"; } + std::string group() const override { return "ds/creational"; } std::string name() const override { return "Singleton"; } std::string description() const override { return "Singleton Pattern Example"; @@ -82,4 +82,4 @@ class SingletonExample : public IExample { void execute() override { SingletonPattern::run(); } }; -REGISTER_EXAMPLE(SingletonExample, "patterns/creational", "Singleton"); \ No newline at end of file +REGISTER_EXAMPLE(SingletonExample, "ds/creational", "Singleton"); \ No newline at end of file diff --git a/src/ds/structural/Adapter.cpp b/src/ds/structural/Adapter.cpp index 90fcead..0de92c2 100644 --- a/src/ds/structural/Adapter.cpp +++ b/src/ds/structural/Adapter.cpp @@ -145,7 +145,7 @@ void run() { class AdapterExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Adapter"; } std::string description() const override { return "Factory Pattern Example"; } void execute() override { @@ -154,4 +154,4 @@ class AdapterExample : public IExample { } }; -REGISTER_EXAMPLE(AdapterExample, "patterns/structural", "Adapter"); \ No newline at end of file +REGISTER_EXAMPLE(AdapterExample, "ds/structural", "Adapter"); \ No newline at end of file diff --git a/src/ds/structural/Bridge.cpp b/src/ds/structural/Bridge.cpp index f6a19a9..94be81d 100644 --- a/src/ds/structural/Bridge.cpp +++ b/src/ds/structural/Bridge.cpp @@ -171,7 +171,7 @@ void run() { class BridgeExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Bridge"; } std::string description() const override { return "Bridge Pattern Example"; } void execute() override { @@ -180,5 +180,5 @@ class BridgeExample : public IExample { } }; -REGISTER_EXAMPLE(BridgeExample, "patterns/structural", "Bridge"); +REGISTER_EXAMPLE(BridgeExample, "ds/structural", "Bridge"); } // namespace \ No newline at end of file diff --git a/src/ds/structural/Composite.cpp b/src/ds/structural/Composite.cpp index 7a40213..1557ef4 100644 --- a/src/ds/structural/Composite.cpp +++ b/src/ds/structural/Composite.cpp @@ -429,7 +429,7 @@ void run() { class CompositeExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Composite"; } std::string description() const override { return "Composite Pattern Example"; @@ -440,4 +440,4 @@ class CompositeExample : public IExample { } }; -REGISTER_EXAMPLE(CompositeExample, "patterns/structural", "Composite"); \ No newline at end of file +REGISTER_EXAMPLE(CompositeExample, "ds/structural", "Composite"); \ No newline at end of file diff --git a/src/ds/structural/Decorator.cpp b/src/ds/structural/Decorator.cpp index 5e66230..64bb1ca 100644 --- a/src/ds/structural/Decorator.cpp +++ b/src/ds/structural/Decorator.cpp @@ -189,7 +189,7 @@ void run() { class DecoratorExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Decorator"; } std::string description() const override { return "Decorator Pattern Example"; @@ -200,4 +200,4 @@ class DecoratorExample : public IExample { } }; -REGISTER_EXAMPLE(DecoratorExample, "patterns/structural", "Decorator"); \ No newline at end of file +REGISTER_EXAMPLE(DecoratorExample, "ds/structural", "Decorator"); \ No newline at end of file diff --git a/src/ds/structural/Facade.cpp b/src/ds/structural/Facade.cpp index 04f8940..2d48d09 100644 --- a/src/ds/structural/Facade.cpp +++ b/src/ds/structural/Facade.cpp @@ -213,7 +213,7 @@ void run() { class FacadeExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Facade"; } std::string description() const override { return "Facade Pattern Example"; } void execute() override { @@ -222,4 +222,4 @@ class FacadeExample : public IExample { } }; -REGISTER_EXAMPLE(FacadeExample, "patterns/structural", "Facade"); \ No newline at end of file +REGISTER_EXAMPLE(FacadeExample, "ds/structural", "Facade"); \ No newline at end of file diff --git a/src/ds/structural/Flyweight.cpp b/src/ds/structural/Flyweight.cpp index ed9436d..8adb017 100644 --- a/src/ds/structural/Flyweight.cpp +++ b/src/ds/structural/Flyweight.cpp @@ -331,7 +331,7 @@ void run() { class FlyweightExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Flyweight"; } std::string description() const override { return "Flyweight Pattern Example"; @@ -342,4 +342,4 @@ class FlyweightExample : public IExample { } }; -REGISTER_EXAMPLE(FlyweightExample, "patterns/structural", "Flyweight"); \ No newline at end of file +REGISTER_EXAMPLE(FlyweightExample, "ds/structural", "Flyweight"); \ No newline at end of file diff --git a/src/ds/structural/Proxy.cpp b/src/ds/structural/Proxy.cpp index a5d79f8..b25f979 100644 --- a/src/ds/structural/Proxy.cpp +++ b/src/ds/structural/Proxy.cpp @@ -221,7 +221,7 @@ void run() { class ProxyExample : public IExample { public: - std::string group() const override { return "patterns/structural"; } + std::string group() const override { return "ds/structural"; } std::string name() const override { return "Proxy"; } std::string description() const override { return "Proxy Pattern Example"; } void execute() override { @@ -230,5 +230,5 @@ class ProxyExample : public IExample { } }; -REGISTER_EXAMPLE(ProxyExample, "patterns/structural", "Proxy"); +REGISTER_EXAMPLE(ProxyExample, "ds/structural", "Proxy"); } // namespace From e52d0e46629ba08bae91ba59551810ec8461aebe Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:35:44 +0700 Subject: [PATCH 4/9] Update doc for future/promise --- .../concurrency => docs/image}/future_promis.png | Bin .../image}/future_promis_flow.png | Bin src/core/concurrency/README.md | 2 ++ 3 files changed, 2 insertions(+) rename {src/core/concurrency => docs/image}/future_promis.png (100%) rename {src/core/concurrency => docs/image}/future_promis_flow.png (100%) diff --git a/src/core/concurrency/future_promis.png b/docs/image/future_promis.png similarity index 100% rename from src/core/concurrency/future_promis.png rename to docs/image/future_promis.png diff --git a/src/core/concurrency/future_promis_flow.png b/docs/image/future_promis_flow.png similarity index 100% rename from src/core/concurrency/future_promis_flow.png rename to docs/image/future_promis_flow.png diff --git a/src/core/concurrency/README.md b/src/core/concurrency/README.md index 721254d..839b604 100644 --- a/src/core/concurrency/README.md +++ b/src/core/concurrency/README.md @@ -208,6 +208,8 @@ Back in main(), data = Example data after processing ```cpp auto future = std::async(std::launch::async,some_function, arg_1, arg_2); ``` +![future](../../../docs/image/future_promis.png) +![future_flow](../../../docs/image/future_promis_flow.png) - e.g. ```cpp // Pass in function pointer From 56a532d21fa64e5346d5f07102e3e1826eace52a Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:43:14 +0700 Subject: [PATCH 5/9] Refactor (ctn) --- src/core/CMakeLists.txt | 37 ++++++++++--------- src/core/{datatypes => }/class/Binding.cpp | 0 .../{datatypes => }/class/CConstructors.cpp | 0 .../{datatypes => }/class/CDestructors.cpp | 0 src/core/{datatypes => }/class/Friend.cpp | 0 src/core/{datatypes => }/class/README.md | 0 .../{datatypes => }/class/Relationship.cpp | 0 .../class/RoleOfThreeFiveZero.cpp | 0 .../class/SallowDeepCopying.cpp | 0 .../{datatypes => }/class/VirtualBase.cpp | 0 src/core/{datatypes => }/container/README.md | 0 .../container/adapter/Queue.cpp | 0 .../container/adapter/Stack.cpp | 0 .../container/associative/Set.cpp | 0 .../container/sequence/Array.cpp | 0 .../container/sequence/Deque.cpp | 0 .../container/sequence/Vector.cpp | 0 .../container/unordered/UnorderedMap.cpp | 0 .../{datatypes => }/smart_pointer/README.md | 0 .../{datatypes => }/smart_pointer/Shared.cpp | 0 .../{datatypes => }/smart_pointer/Unique.cpp | 0 .../{datatypes => }/smart_pointer/Weak.cpp | 0 22 files changed, 19 insertions(+), 18 deletions(-) rename src/core/{datatypes => }/class/Binding.cpp (100%) rename src/core/{datatypes => }/class/CConstructors.cpp (100%) rename src/core/{datatypes => }/class/CDestructors.cpp (100%) rename src/core/{datatypes => }/class/Friend.cpp (100%) rename src/core/{datatypes => }/class/README.md (100%) rename src/core/{datatypes => }/class/Relationship.cpp (100%) rename src/core/{datatypes => }/class/RoleOfThreeFiveZero.cpp (100%) rename src/core/{datatypes => }/class/SallowDeepCopying.cpp (100%) rename src/core/{datatypes => }/class/VirtualBase.cpp (100%) rename src/core/{datatypes => }/container/README.md (100%) rename src/core/{datatypes => }/container/adapter/Queue.cpp (100%) rename src/core/{datatypes => }/container/adapter/Stack.cpp (100%) rename src/core/{datatypes => }/container/associative/Set.cpp (100%) rename src/core/{datatypes => }/container/sequence/Array.cpp (100%) rename src/core/{datatypes => }/container/sequence/Deque.cpp (100%) rename src/core/{datatypes => }/container/sequence/Vector.cpp (100%) rename src/core/{datatypes => }/container/unordered/UnorderedMap.cpp (100%) rename src/core/{datatypes => }/smart_pointer/README.md (100%) rename src/core/{datatypes => }/smart_pointer/Shared.cpp (100%) rename src/core/{datatypes => }/smart_pointer/Unique.cpp (100%) rename src/core/{datatypes => }/smart_pointer/Weak.cpp (100%) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 2283b40..8bf6064 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -30,14 +30,14 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/TypeConVersions.cpp # Classes and object lifecycle - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/Friend.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/CConstructors.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/CDestructors.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/SallowDeepCopying.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/RoleOfThreeFiveZero.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/Relationship.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/VirtualBase.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/class/Binding.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/Friend.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/CConstructors.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/CDestructors.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/SallowDeepCopying.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/RoleOfThreeFiveZero.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/Relationship.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/VirtualBase.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/Binding.cpp # String handling ${CMAKE_CURRENT_SOURCE_DIR}/string/StringFormatting.cpp @@ -57,20 +57,21 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/filehandle/BinaryFileHandling.cpp # STL containers and expressions - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/sequence/Array.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/sequence/Vector.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/unordered/UnorderedMap.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/sequence/Array.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/sequence/Vector.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/unordered/UnorderedMap.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/adapter/Queue.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/adapter/Stack.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/sequence/Deque.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/container/associative/Set.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/expression/Lambda.cpp ${CMAKE_CURRENT_SOURCE_DIR}/expression/FunctionPointer.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/adapter/Queue.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/adapter/Stack.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/sequence/Deque.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/container/associative/Set.cpp # Smart pointers - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/smart_pointer/Unique.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/smart_pointer/Shared.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/datatypes/smart_pointer/Weak.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/smart_pointer/Unique.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/smart_pointer/Shared.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/smart_pointer/Weak.cpp # Operator overloading ${CMAKE_CURRENT_SOURCE_DIR}/overloading/ArithmeticOperator.cpp diff --git a/src/core/datatypes/class/Binding.cpp b/src/core/class/Binding.cpp similarity index 100% rename from src/core/datatypes/class/Binding.cpp rename to src/core/class/Binding.cpp diff --git a/src/core/datatypes/class/CConstructors.cpp b/src/core/class/CConstructors.cpp similarity index 100% rename from src/core/datatypes/class/CConstructors.cpp rename to src/core/class/CConstructors.cpp diff --git a/src/core/datatypes/class/CDestructors.cpp b/src/core/class/CDestructors.cpp similarity index 100% rename from src/core/datatypes/class/CDestructors.cpp rename to src/core/class/CDestructors.cpp diff --git a/src/core/datatypes/class/Friend.cpp b/src/core/class/Friend.cpp similarity index 100% rename from src/core/datatypes/class/Friend.cpp rename to src/core/class/Friend.cpp diff --git a/src/core/datatypes/class/README.md b/src/core/class/README.md similarity index 100% rename from src/core/datatypes/class/README.md rename to src/core/class/README.md diff --git a/src/core/datatypes/class/Relationship.cpp b/src/core/class/Relationship.cpp similarity index 100% rename from src/core/datatypes/class/Relationship.cpp rename to src/core/class/Relationship.cpp diff --git a/src/core/datatypes/class/RoleOfThreeFiveZero.cpp b/src/core/class/RoleOfThreeFiveZero.cpp similarity index 100% rename from src/core/datatypes/class/RoleOfThreeFiveZero.cpp rename to src/core/class/RoleOfThreeFiveZero.cpp diff --git a/src/core/datatypes/class/SallowDeepCopying.cpp b/src/core/class/SallowDeepCopying.cpp similarity index 100% rename from src/core/datatypes/class/SallowDeepCopying.cpp rename to src/core/class/SallowDeepCopying.cpp diff --git a/src/core/datatypes/class/VirtualBase.cpp b/src/core/class/VirtualBase.cpp similarity index 100% rename from src/core/datatypes/class/VirtualBase.cpp rename to src/core/class/VirtualBase.cpp diff --git a/src/core/datatypes/container/README.md b/src/core/container/README.md similarity index 100% rename from src/core/datatypes/container/README.md rename to src/core/container/README.md diff --git a/src/core/datatypes/container/adapter/Queue.cpp b/src/core/container/adapter/Queue.cpp similarity index 100% rename from src/core/datatypes/container/adapter/Queue.cpp rename to src/core/container/adapter/Queue.cpp diff --git a/src/core/datatypes/container/adapter/Stack.cpp b/src/core/container/adapter/Stack.cpp similarity index 100% rename from src/core/datatypes/container/adapter/Stack.cpp rename to src/core/container/adapter/Stack.cpp diff --git a/src/core/datatypes/container/associative/Set.cpp b/src/core/container/associative/Set.cpp similarity index 100% rename from src/core/datatypes/container/associative/Set.cpp rename to src/core/container/associative/Set.cpp diff --git a/src/core/datatypes/container/sequence/Array.cpp b/src/core/container/sequence/Array.cpp similarity index 100% rename from src/core/datatypes/container/sequence/Array.cpp rename to src/core/container/sequence/Array.cpp diff --git a/src/core/datatypes/container/sequence/Deque.cpp b/src/core/container/sequence/Deque.cpp similarity index 100% rename from src/core/datatypes/container/sequence/Deque.cpp rename to src/core/container/sequence/Deque.cpp diff --git a/src/core/datatypes/container/sequence/Vector.cpp b/src/core/container/sequence/Vector.cpp similarity index 100% rename from src/core/datatypes/container/sequence/Vector.cpp rename to src/core/container/sequence/Vector.cpp diff --git a/src/core/datatypes/container/unordered/UnorderedMap.cpp b/src/core/container/unordered/UnorderedMap.cpp similarity index 100% rename from src/core/datatypes/container/unordered/UnorderedMap.cpp rename to src/core/container/unordered/UnorderedMap.cpp diff --git a/src/core/datatypes/smart_pointer/README.md b/src/core/smart_pointer/README.md similarity index 100% rename from src/core/datatypes/smart_pointer/README.md rename to src/core/smart_pointer/README.md diff --git a/src/core/datatypes/smart_pointer/Shared.cpp b/src/core/smart_pointer/Shared.cpp similarity index 100% rename from src/core/datatypes/smart_pointer/Shared.cpp rename to src/core/smart_pointer/Shared.cpp diff --git a/src/core/datatypes/smart_pointer/Unique.cpp b/src/core/smart_pointer/Unique.cpp similarity index 100% rename from src/core/datatypes/smart_pointer/Unique.cpp rename to src/core/smart_pointer/Unique.cpp diff --git a/src/core/datatypes/smart_pointer/Weak.cpp b/src/core/smart_pointer/Weak.cpp similarity index 100% rename from src/core/datatypes/smart_pointer/Weak.cpp rename to src/core/smart_pointer/Weak.cpp From 2d335160090ed69de36ac90caf64db6cf2cce066 Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:50:53 +0700 Subject: [PATCH 6/9] Add an example for std::find_if --- src/core/CMakeLists.txt | 4 ++ src/core/class/Encapsulation.cpp | 81 ++++++++++++++++++++++++++++++++ src/core/utils/StdAlgorithm.cpp | 38 +++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 src/core/class/Encapsulation.cpp create mode 100644 src/core/utils/StdAlgorithm.cpp diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 8bf6064..0ffa591 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -38,6 +38,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/class/Relationship.cpp ${CMAKE_CURRENT_SOURCE_DIR}/class/VirtualBase.cpp ${CMAKE_CURRENT_SOURCE_DIR}/class/Binding.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/class/Encapsulation.cpp # String handling ${CMAKE_CURRENT_SOURCE_DIR}/string/StringFormatting.cpp @@ -95,6 +96,9 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/concurrency/RaceCondition.cpp ${CMAKE_CURRENT_SOURCE_DIR}/concurrency/ConditionVariable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/concurrency/FuturePromise.cpp + + # Utils + ${CMAKE_CURRENT_SOURCE_DIR}/utils/StdAlgorithm.cpp ) # Export CORE_SOURCES to the parent CMakeLists.txt diff --git a/src/core/class/Encapsulation.cpp b/src/core/class/Encapsulation.cpp new file mode 100644 index 0000000..c4c755c --- /dev/null +++ b/src/core/class/Encapsulation.cpp @@ -0,0 +1,81 @@ +// Encapsulation means grouping data and the functions that use that data +// inside a single unit, usually a class. + +// Benefits of encapsulation: + +// 1. Data Hiding +// The internal data of a class can be hidden from outside code. +// Other code cannot directly modify it, which helps protect the object's state. + +// 2. Modularity +// Data and related functions are organized in one place. +// This makes the code easier to understand, maintain, and test. + +// 3. Flexibility and Maintainability +// The internal implementation of a class can change without affecting +// the code that uses it, as long as the public interface stays the same. + +// 4. Improved Security +// Restricting access to internal data helps prevent unintended or incorrect use. + +// Implementation in C++: +// Encapsulation is implemented using access specifiers such as +// `private` and `protected` to restrict access to class members. +// Public getter and setter functions can be used to access or modify +// the internal data in a controlled way. + +#include +#include +#include + +namespace { +class Person { + private: + std::string name_; + int age_; + + public: + Person(const std::string& name, int age) : name_(name), age_(age) {} + + std::string getName() const { return name_; } + int getAge() const { return age_; } + + void setAge(int age) { + if (age >= 0) { + age_ = age; + } + } + + void introduce() const { + std::cout << "Name: " << name_ << ", Age: " << age_ << '\n'; + } +}; + +void run() { + Person person("Alice", 25); + + std::cout << "Initial state:\n"; + person.introduce(); + + std::cout << "\nUpdating age through setter:\n"; + person.setAge(30); + person.introduce(); + + std::cout << "\nAccessing data through getters:\n"; + std::cout << "Name: " << person.getName() << '\n'; + std::cout << "Age: " << person.getAge() << '\n'; +} + +} // namespace + +class Encapsulation : public IExample { + std::string group() const override { return "core/class"; } + std::string name() const override { return "Encapsulation"; } + std::string description() const override { + return "Examples demonstrating encapsulation in C++"; + } + + void execute() override { run(); } +}; + +REGISTER_EXAMPLE(Encapsulation, "core/class", "Encapsulation"); \ No newline at end of file diff --git a/src/core/utils/StdAlgorithm.cpp b/src/core/utils/StdAlgorithm.cpp new file mode 100644 index 0000000..b4eaf10 --- /dev/null +++ b/src/core/utils/StdAlgorithm.cpp @@ -0,0 +1,38 @@ +#include +#include + +#include "ExampleRegistry.h" + +namespace FindIfExample { +void run() { + std::cout << "std::find_if example\n"; + std::vector v{1, 2, 3, 4, 5}; + auto it = std::find_if(v.begin(), v.end(), [](int i) { return i % 2 == 0; }); + if (it != v.end()) { + std::cout << "First even number: " << *it << '\n'; + } else { + std::cout << "No even number found\n"; + } + + std::cout << "std::find_if_not example\n"; + auto it_not = + std::find_if_not(v.begin(), v.end(), [](int i) { return i % 2 == 0; }); + if (it_not != v.end()) { + std::cout << "First odd number: " << *it_not << '\n'; + } else { + std::cout << "No odd number found\n"; + } +} +} // namespace FindIfExample + +class StdAlgorithm : public IExample { + std::string group() const override { return "core/utils"; } + std::string name() const override { return "StdAlgorithm"; } + std::string description() const override { + return "The examples for header"; + } + + void execute() override { FindIfExample::run(); } +}; + +REGISTER_EXAMPLE(StdAlgorithm, "core/utils", "StdAlgorithm"); \ No newline at end of file From 71e44c20585158a0b2668544f5f176c4d24f0e8b Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 10:59:41 +0700 Subject: [PATCH 7/9] Add files @TODO: --- src/core/class/Abstraction.cpp | 0 src/core/class/Inheritance.cpp | 0 src/core/class/Polymorphism.cpp | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/core/class/Abstraction.cpp create mode 100644 src/core/class/Inheritance.cpp create mode 100644 src/core/class/Polymorphism.cpp diff --git a/src/core/class/Abstraction.cpp b/src/core/class/Abstraction.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/core/class/Inheritance.cpp b/src/core/class/Inheritance.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/core/class/Polymorphism.cpp b/src/core/class/Polymorphism.cpp new file mode 100644 index 0000000..e69de29 From c56cfbaf08b0907031587f8e1a2412c092239778 Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 11:08:24 +0700 Subject: [PATCH 8/9] Refactoring (ctn) --- src/CMakeLists.txt | 4 ++-- src/{ds => dp}/CMakeLists.txt | 4 ++-- src/{ds => dp}/behavioral/ChainOfCommand.cpp | 4 ++-- src/{ds => dp}/behavioral/Command.cpp | 4 ++-- src/{ds => dp}/behavioral/Iterator.cpp | 4 ++-- src/{ds => dp}/behavioral/Mediator.cpp | 4 ++-- src/{ds => dp}/behavioral/Memento.cpp | 4 ++-- src/{ds => dp}/behavioral/Observer.cpp | 4 ++-- src/{ds => dp}/behavioral/README.md | 20 +++++++++---------- src/{ds => dp}/behavioral/State.cpp | 4 ++-- src/{ds => dp}/behavioral/Strategy.cpp | 4 ++-- src/{ds => dp}/behavioral/TemplateMethod.cpp | 4 ++-- src/{ds => dp}/behavioral/Visitor.cpp | 4 ++-- src/{ds => dp}/creational/AbstractFactory.cpp | 4 ++-- src/{ds => dp}/creational/Builder.cpp | 4 ++-- src/{ds => dp}/creational/FactoryMethod.cpp | 4 ++-- src/{ds => dp}/creational/Prototype.cpp | 4 ++-- src/{ds => dp}/creational/README.md | 10 +++++----- src/{ds => dp}/creational/Singleton.cpp | 4 ++-- src/{ds => dp}/structural/Adapter.cpp | 4 ++-- src/{ds => dp}/structural/Bridge.cpp | 4 ++-- src/{ds => dp}/structural/Composite.cpp | 4 ++-- src/{ds => dp}/structural/Decorator.cpp | 4 ++-- src/{ds => dp}/structural/Facade.cpp | 4 ++-- src/{ds => dp}/structural/Flyweight.cpp | 4 ++-- src/{ds => dp}/structural/Proxy.cpp | 4 ++-- src/{ds => dp}/structural/README.md | 14 ++++++------- 27 files changed, 70 insertions(+), 70 deletions(-) rename src/{ds => dp}/CMakeLists.txt (95%) rename src/{ds => dp}/behavioral/ChainOfCommand.cpp (97%) rename src/{ds => dp}/behavioral/Command.cpp (97%) rename src/{ds => dp}/behavioral/Iterator.cpp (97%) rename src/{ds => dp}/behavioral/Mediator.cpp (97%) rename src/{ds => dp}/behavioral/Memento.cpp (97%) rename src/{ds => dp}/behavioral/Observer.cpp (97%) rename src/{ds => dp}/behavioral/README.md (84%) rename src/{ds => dp}/behavioral/State.cpp (97%) rename src/{ds => dp}/behavioral/Strategy.cpp (96%) rename src/{ds => dp}/behavioral/TemplateMethod.cpp (96%) rename src/{ds => dp}/behavioral/Visitor.cpp (98%) rename src/{ds => dp}/creational/AbstractFactory.cpp (97%) rename src/{ds => dp}/creational/Builder.cpp (97%) rename src/{ds => dp}/creational/FactoryMethod.cpp (96%) rename src/{ds => dp}/creational/Prototype.cpp (96%) rename src/{ds => dp}/creational/README.md (86%) rename src/{ds => dp}/creational/Singleton.cpp (94%) rename src/{ds => dp}/structural/Adapter.cpp (97%) rename src/{ds => dp}/structural/Bridge.cpp (97%) rename src/{ds => dp}/structural/Composite.cpp (98%) rename src/{ds => dp}/structural/Decorator.cpp (97%) rename src/{ds => dp}/structural/Facade.cpp (98%) rename src/{ds => dp}/structural/Flyweight.cpp (98%) rename src/{ds => dp}/structural/Proxy.cpp (97%) rename src/{ds => dp}/structural/README.md (85%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5cb1c05..35f5910 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,7 @@ # Add project submodules add_subdirectory(core) add_subdirectory(controller) -add_subdirectory(ds) +add_subdirectory(dp) add_subdirectory(socket) add_subdirectory(excercise) @@ -24,7 +24,7 @@ add_executable(${PROJECT_NAME} ${CORE_SOURCES} ${SOCKET_SOURCES} ${CONTROLLER_SOURCES} - ${DS_SOURCES} + ${DP_SOURCES} ${EXCERCISE_SOURCES} ) diff --git a/src/ds/CMakeLists.txt b/src/dp/CMakeLists.txt similarity index 95% rename from src/ds/CMakeLists.txt rename to src/dp/CMakeLists.txt index 314e52e..d8a6b1d 100644 --- a/src/ds/CMakeLists.txt +++ b/src/dp/CMakeLists.txt @@ -1,4 +1,4 @@ -set(DS_SOURCES +set(DP_SOURCES # Structural Patterns ${CMAKE_CURRENT_SOURCE_DIR}/structural/Adapter.cpp @@ -29,4 +29,4 @@ set(DS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/creational/Prototype.cpp ) -set(DS_SOURCES ${DS_SOURCES} PARENT_SCOPE) \ No newline at end of file +set(DP_SOURCES ${DP_SOURCES} PARENT_SCOPE) \ No newline at end of file diff --git a/src/ds/behavioral/ChainOfCommand.cpp b/src/dp/behavioral/ChainOfCommand.cpp similarity index 97% rename from src/ds/behavioral/ChainOfCommand.cpp rename to src/dp/behavioral/ChainOfCommand.cpp index 59093da..4a9ee52 100644 --- a/src/ds/behavioral/ChainOfCommand.cpp +++ b/src/dp/behavioral/ChainOfCommand.cpp @@ -138,11 +138,11 @@ void run() { class ChainOfResponsibilityExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "ChainOfResponsibility"; } std::string description() const override { return "CoR Pattern Example"; } void execute() override { CoR::run(); } }; -REGISTER_EXAMPLE(ChainOfResponsibilityExample, "ds/behavioral", +REGISTER_EXAMPLE(ChainOfResponsibilityExample, "dp/behavioral", "ChainOfResponsibility"); \ No newline at end of file diff --git a/src/ds/behavioral/Command.cpp b/src/dp/behavioral/Command.cpp similarity index 97% rename from src/ds/behavioral/Command.cpp rename to src/dp/behavioral/Command.cpp index f6f47fc..4136e8a 100644 --- a/src/ds/behavioral/Command.cpp +++ b/src/dp/behavioral/Command.cpp @@ -129,10 +129,10 @@ void run() { class CommandExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Command"; } std::string description() const override { return "Command Pattern Example"; } void execute() override { Command::run(); } }; -REGISTER_EXAMPLE(CommandExample, "ds/behavioral", "Command"); \ No newline at end of file +REGISTER_EXAMPLE(CommandExample, "dp/behavioral", "Command"); \ No newline at end of file diff --git a/src/ds/behavioral/Iterator.cpp b/src/dp/behavioral/Iterator.cpp similarity index 97% rename from src/ds/behavioral/Iterator.cpp rename to src/dp/behavioral/Iterator.cpp index 96866d9..a1df34b 100644 --- a/src/ds/behavioral/Iterator.cpp +++ b/src/dp/behavioral/Iterator.cpp @@ -200,7 +200,7 @@ void run() { class IteratorExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Iterator"; } std::string description() const override { return "Iterator Pattern Example"; @@ -208,4 +208,4 @@ class IteratorExample : public IExample { void execute() override { Iterator::run(); } }; -REGISTER_EXAMPLE(IteratorExample, "ds/behavioral", "Iterator"); \ No newline at end of file +REGISTER_EXAMPLE(IteratorExample, "dp/behavioral", "Iterator"); \ No newline at end of file diff --git a/src/ds/behavioral/Mediator.cpp b/src/dp/behavioral/Mediator.cpp similarity index 97% rename from src/ds/behavioral/Mediator.cpp rename to src/dp/behavioral/Mediator.cpp index e1ec125..e5d66dd 100644 --- a/src/ds/behavioral/Mediator.cpp +++ b/src/dp/behavioral/Mediator.cpp @@ -166,7 +166,7 @@ void run() { class MediatorExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Mediator"; } std::string description() const override { return "Mediator Pattern Example"; @@ -174,4 +174,4 @@ class MediatorExample : public IExample { void execute() override { Mediator::run(); } }; -REGISTER_EXAMPLE(MediatorExample, "ds/behavioral", "Mediator"); \ No newline at end of file +REGISTER_EXAMPLE(MediatorExample, "dp/behavioral", "Mediator"); \ No newline at end of file diff --git a/src/ds/behavioral/Memento.cpp b/src/dp/behavioral/Memento.cpp similarity index 97% rename from src/ds/behavioral/Memento.cpp rename to src/dp/behavioral/Memento.cpp index 5cf3e75..93d0f93 100644 --- a/src/ds/behavioral/Memento.cpp +++ b/src/dp/behavioral/Memento.cpp @@ -195,7 +195,7 @@ void run() { class MementoExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Memento"; } std::string description() const override { return "Memento Pattern Example "; @@ -203,4 +203,4 @@ class MementoExample : public IExample { void execute() override { Memento::run(); } }; -REGISTER_EXAMPLE(MementoExample, "ds/behavioral", "Memento"); \ No newline at end of file +REGISTER_EXAMPLE(MementoExample, "dp/behavioral", "Memento"); \ No newline at end of file diff --git a/src/ds/behavioral/Observer.cpp b/src/dp/behavioral/Observer.cpp similarity index 97% rename from src/ds/behavioral/Observer.cpp rename to src/dp/behavioral/Observer.cpp index c073cf9..e90c762 100644 --- a/src/ds/behavioral/Observer.cpp +++ b/src/dp/behavioral/Observer.cpp @@ -179,7 +179,7 @@ void run() { class ObserverExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Observer"; } std::string description() const override { return "Observer Pattern Example"; @@ -187,4 +187,4 @@ class ObserverExample : public IExample { void execute() override { Observer::run(); } }; -REGISTER_EXAMPLE(ObserverExample, "ds/behavioral", "Observer"); \ No newline at end of file +REGISTER_EXAMPLE(ObserverExample, "dp/behavioral", "Observer"); \ No newline at end of file diff --git a/src/ds/behavioral/README.md b/src/dp/behavioral/README.md similarity index 84% rename from src/ds/behavioral/README.md rename to src/dp/behavioral/README.md index 65b8bc0..3ef5a5b 100644 --- a/src/ds/behavioral/README.md +++ b/src/dp/behavioral/README.md @@ -5,7 +5,7 @@ Behavioral design patterns are concerned with algorithms and the assignment of r --- ## 1. Chain of Responsibility -![Diagram](../../../docs/uml/ds/behavioral_CoR.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_CoR.drawio.svg) **Chain of Responsibility** Lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain. @@ -15,7 +15,7 @@ Customer support tickets in a company. Simple requests go to the first-level sup --- ## 2. Command -![Diagram](../../../docs/uml/ds/behavioral_command.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_command.drawio.svg) **Command** Turns a request into a stand-alone object that contains all information about the request. This lets you pass requests as arguments, delay or queue execution, and support undo operations. @@ -25,7 +25,7 @@ Using a remote control for smart home devices. Each button press represents a co --- ## 3. Iterator -![Diagram](../../../docs/uml/ds/behavioral_iterator.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_iterator.drawio.svg) **Iterator** Lets you traverse elements of a collection without exposing its underlying representation (list, stack, tree, etc.). @@ -35,7 +35,7 @@ Browsing a photo gallery app. You can swipe left or right to view photos without --- ## 4. Mediator -![Diagram](../../../docs/uml/ds/behavioral_mediator.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_mediator.drawio.svg) **Mediator** Reduces chaotic dependencies between objects by forcing them to communicate through a mediator. @@ -45,7 +45,7 @@ An air traffic control tower. Planes don’t communicate directly with each othe --- ## 5. Memento -![Diagram](../../../docs/uml/ds/behavioral_memento.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_memento.drawio.svg) **Memento** Lets you save and restore the previous state of an object without revealing its implementation details. @@ -55,7 +55,7 @@ The “Undo” feature in a text editor. You can revert to a previous version of --- ## 6. Observer -![Diagram](../../../docs/uml/ds/behavioral_observer.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_observer.drawio.svg) **Observer** Defines a subscription mechanism to notify multiple objects about events happening to the object they’re observing. @@ -65,7 +65,7 @@ Social media notifications. When someone posts a new photo, all their followers --- ## 7. State -![Diagram](../../../docs/uml/ds/behavioral_state.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_state.drawio.svg) **State** Lets an object alter its behavior when its internal state changes, making it appear as if the object changed its class. @@ -75,7 +75,7 @@ A traffic light. Its behavior (red, yellow, green) changes automatically dependi --- ## 8. Strategy -![Diagram](../../../docs/uml/ds/behavioral_strategy.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_strategy.drawio.svg) **Strategy** Defines a family of algorithms, puts each into a separate class, and makes them interchangeable. @@ -85,7 +85,7 @@ A navigation app lets you choose between driving, walking, or cycling routes. Ea --- ## 9. Template Method -![Diagram](../../../docs/uml/ds/behavioral_templatemethod.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_templatemethod.drawio.svg) **Template Method** Defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps without changing its structure. @@ -95,7 +95,7 @@ Making coffee or tea in a café. The steps (boil water, pour, serve) are the sam --- ## 10. Visitor -![Diagram](../../../docs/uml/ds/behavioral_visitor.drawio.svg) +![Diagram](../../../docs/uml/dp/behavioral_visitor.drawio.svg) **Visitor** Lets you separate algorithms from the objects on which they operate. diff --git a/src/ds/behavioral/State.cpp b/src/dp/behavioral/State.cpp similarity index 97% rename from src/ds/behavioral/State.cpp rename to src/dp/behavioral/State.cpp index 9d055e9..6c4517d 100644 --- a/src/ds/behavioral/State.cpp +++ b/src/dp/behavioral/State.cpp @@ -136,10 +136,10 @@ void run() { class StateExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "State"; } std::string description() const override { return "State Pattern Example"; } void execute() override { State::run(); } }; -REGISTER_EXAMPLE(StateExample, "ds/behavioral", "State"); \ No newline at end of file +REGISTER_EXAMPLE(StateExample, "dp/behavioral", "State"); \ No newline at end of file diff --git a/src/ds/behavioral/Strategy.cpp b/src/dp/behavioral/Strategy.cpp similarity index 96% rename from src/ds/behavioral/Strategy.cpp rename to src/dp/behavioral/Strategy.cpp index 6bf113a..8b41a4c 100644 --- a/src/ds/behavioral/Strategy.cpp +++ b/src/dp/behavioral/Strategy.cpp @@ -105,7 +105,7 @@ void run() { class StrategyExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Strategy"; } std::string description() const override { return "Strategy Pattern Example"; @@ -113,4 +113,4 @@ class StrategyExample : public IExample { void execute() override { Strategy::run(); } }; -REGISTER_EXAMPLE(StrategyExample, "ds/behavioral", "Strategy"); \ No newline at end of file +REGISTER_EXAMPLE(StrategyExample, "dp/behavioral", "Strategy"); \ No newline at end of file diff --git a/src/ds/behavioral/TemplateMethod.cpp b/src/dp/behavioral/TemplateMethod.cpp similarity index 96% rename from src/ds/behavioral/TemplateMethod.cpp rename to src/dp/behavioral/TemplateMethod.cpp index bc7ebb3..f30f939 100644 --- a/src/ds/behavioral/TemplateMethod.cpp +++ b/src/dp/behavioral/TemplateMethod.cpp @@ -107,7 +107,7 @@ void run() { class TemplateMethodExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "TemplateMethod"; } std::string description() const override { return "TemplateMethod Pattern Example"; @@ -115,4 +115,4 @@ class TemplateMethodExample : public IExample { void execute() override { TemplateMethod::run(); } }; -REGISTER_EXAMPLE(TemplateMethodExample, "ds/behavioral", "TemplateMethod"); \ No newline at end of file +REGISTER_EXAMPLE(TemplateMethodExample, "dp/behavioral", "TemplateMethod"); \ No newline at end of file diff --git a/src/ds/behavioral/Visitor.cpp b/src/dp/behavioral/Visitor.cpp similarity index 98% rename from src/ds/behavioral/Visitor.cpp rename to src/dp/behavioral/Visitor.cpp index 6c1b19a..87be60a 100644 --- a/src/ds/behavioral/Visitor.cpp +++ b/src/dp/behavioral/Visitor.cpp @@ -240,10 +240,10 @@ void run() { class VisitorExample : public IExample { public: - std::string group() const override { return "ds/behavioral"; } + std::string group() const override { return "dp/behavioral"; } std::string name() const override { return "Visitor"; } std::string description() const override { return "Visitor Pattern Example"; } void execute() override { Visitor::run(); } }; -REGISTER_EXAMPLE(VisitorExample, "ds/behavioral", "Visitor"); \ No newline at end of file +REGISTER_EXAMPLE(VisitorExample, "dp/behavioral", "Visitor"); \ No newline at end of file diff --git a/src/ds/creational/AbstractFactory.cpp b/src/dp/creational/AbstractFactory.cpp similarity index 97% rename from src/ds/creational/AbstractFactory.cpp rename to src/dp/creational/AbstractFactory.cpp index 43323ab..6f57506 100644 --- a/src/ds/creational/AbstractFactory.cpp +++ b/src/dp/creational/AbstractFactory.cpp @@ -167,7 +167,7 @@ void run() { class AbstractFactoryExample : public IExample { public: - std::string group() const override { return "ds/creational"; } + std::string group() const override { return "dp/creational"; } std::string name() const override { return "AbstractFactory"; } std::string description() const override { return "AbstractFactory Pattern Example"; @@ -175,4 +175,4 @@ class AbstractFactoryExample : public IExample { void execute() override { AbstractFactory::run(); } }; -REGISTER_EXAMPLE(AbstractFactoryExample, "ds/creational", "AbstractFactory"); \ No newline at end of file +REGISTER_EXAMPLE(AbstractFactoryExample, "dp/creational", "AbstractFactory"); \ No newline at end of file diff --git a/src/ds/creational/Builder.cpp b/src/dp/creational/Builder.cpp similarity index 97% rename from src/ds/creational/Builder.cpp rename to src/dp/creational/Builder.cpp index ad1b653..13024f0 100644 --- a/src/ds/creational/Builder.cpp +++ b/src/dp/creational/Builder.cpp @@ -165,10 +165,10 @@ void run() { class BuilderExample : public IExample { public: - std::string group() const override { return "ds/creational"; } + std::string group() const override { return "dp/creational"; } std::string name() const override { return "Builder"; } std::string description() const override { return "Builder Pattern Example"; } void execute() override { BuilderPattern::run(); } }; -REGISTER_EXAMPLE(BuilderExample, "ds/creational", "Builder"); \ No newline at end of file +REGISTER_EXAMPLE(BuilderExample, "dp/creational", "Builder"); \ No newline at end of file diff --git a/src/ds/creational/FactoryMethod.cpp b/src/dp/creational/FactoryMethod.cpp similarity index 96% rename from src/ds/creational/FactoryMethod.cpp rename to src/dp/creational/FactoryMethod.cpp index 500aabd..7160e62 100644 --- a/src/ds/creational/FactoryMethod.cpp +++ b/src/dp/creational/FactoryMethod.cpp @@ -134,7 +134,7 @@ void run() { class FactoryMethodExample : public IExample { public: - std::string group() const override { return "ds/creational"; } + std::string group() const override { return "dp/creational"; } std::string name() const override { return "FactoryMethod"; } std::string description() const override { return "FactoryMethod Pattern Example"; @@ -142,4 +142,4 @@ class FactoryMethodExample : public IExample { void execute() override { FactoryMethod::run(); } }; -REGISTER_EXAMPLE(FactoryMethodExample, "ds/creational", "FactoryMethod"); \ No newline at end of file +REGISTER_EXAMPLE(FactoryMethodExample, "dp/creational", "FactoryMethod"); \ No newline at end of file diff --git a/src/ds/creational/Prototype.cpp b/src/dp/creational/Prototype.cpp similarity index 96% rename from src/ds/creational/Prototype.cpp rename to src/dp/creational/Prototype.cpp index 17e7361..daa40bd 100644 --- a/src/ds/creational/Prototype.cpp +++ b/src/dp/creational/Prototype.cpp @@ -121,7 +121,7 @@ void run() { class PrototypeExample : public IExample { public: - std::string group() const override { return "ds/creational"; } + std::string group() const override { return "dp/creational"; } std::string name() const override { return "Prototype"; } std::string description() const override { return "Prototype Pattern Example"; @@ -129,4 +129,4 @@ class PrototypeExample : public IExample { void execute() override { Prototy::run(); } }; -REGISTER_EXAMPLE(PrototypeExample, "ds/creational", "Prototype"); \ No newline at end of file +REGISTER_EXAMPLE(PrototypeExample, "dp/creational", "Prototype"); \ No newline at end of file diff --git a/src/ds/creational/README.md b/src/dp/creational/README.md similarity index 86% rename from src/ds/creational/README.md rename to src/dp/creational/README.md index a6c0492..cca129c 100644 --- a/src/ds/creational/README.md +++ b/src/dp/creational/README.md @@ -5,7 +5,7 @@ Creational design patterns provide various object creation mechanisms, which inc --- ## 1. Factory Method -![Diagram](../../../docs/uml/ds/creational_factorymethod.drawio.svg) +![Diagram](../../../docs/uml/dp/creational_factorymethod.drawio.svg) **Factory Method** Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. @@ -15,7 +15,7 @@ A ride-hailing app can create different types of rides: economy, premium, or SUV --- ## 2. Abstract Factory -![Diagram](../../../docs/uml/ds/creational_abstractfactory.drawio.svg) +![Diagram](../../../docs/uml/dp/creational_abstractfactory.drawio.svg) **Abstract Factory** Lets you produce families of related objects without specifying their concrete classes. @@ -25,7 +25,7 @@ A furniture store app that sells sets of furniture. If a customer chooses a "Mod --- ## 3. Builder -![Diagram](../../../docs/uml/ds/creational_builder.drawio.svg) +![Diagram](../../../docs/uml/dp/creational_builder.drawio.svg) **Builder** Lets you construct complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code. @@ -35,7 +35,7 @@ Ordering a custom pizza online. You can choose the dough, sauce, toppings, and s --- ## 4. Prototype -![Diagram](../../../docs/uml/ds/creational_prototype.drawio.svg) +![Diagram](../../../docs/uml/dp/creational_prototype.drawio.svg) **Prototype** Lets you copy existing objects without making your code dependent on their classes. @@ -45,7 +45,7 @@ Copying a template for a new document in Google Docs. Instead of creating a docu --- ## 5. Singleton -![Diagram](../../../docs/uml/ds/creational_singleton.drawio.svg) +![Diagram](../../../docs/uml/dp/creational_singleton.drawio.svg) **Singleton** Lets you ensure that a class has only one instance, while providing a global access point to this instance. diff --git a/src/ds/creational/Singleton.cpp b/src/dp/creational/Singleton.cpp similarity index 94% rename from src/ds/creational/Singleton.cpp rename to src/dp/creational/Singleton.cpp index f6621f0..805c3db 100644 --- a/src/ds/creational/Singleton.cpp +++ b/src/dp/creational/Singleton.cpp @@ -74,7 +74,7 @@ void run() { class SingletonExample : public IExample { public: - std::string group() const override { return "ds/creational"; } + std::string group() const override { return "dp/creational"; } std::string name() const override { return "Singleton"; } std::string description() const override { return "Singleton Pattern Example"; @@ -82,4 +82,4 @@ class SingletonExample : public IExample { void execute() override { SingletonPattern::run(); } }; -REGISTER_EXAMPLE(SingletonExample, "ds/creational", "Singleton"); \ No newline at end of file +REGISTER_EXAMPLE(SingletonExample, "dp/creational", "Singleton"); \ No newline at end of file diff --git a/src/ds/structural/Adapter.cpp b/src/dp/structural/Adapter.cpp similarity index 97% rename from src/ds/structural/Adapter.cpp rename to src/dp/structural/Adapter.cpp index 0de92c2..e812403 100644 --- a/src/ds/structural/Adapter.cpp +++ b/src/dp/structural/Adapter.cpp @@ -145,7 +145,7 @@ void run() { class AdapterExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Adapter"; } std::string description() const override { return "Factory Pattern Example"; } void execute() override { @@ -154,4 +154,4 @@ class AdapterExample : public IExample { } }; -REGISTER_EXAMPLE(AdapterExample, "ds/structural", "Adapter"); \ No newline at end of file +REGISTER_EXAMPLE(AdapterExample, "dp/structural", "Adapter"); \ No newline at end of file diff --git a/src/ds/structural/Bridge.cpp b/src/dp/structural/Bridge.cpp similarity index 97% rename from src/ds/structural/Bridge.cpp rename to src/dp/structural/Bridge.cpp index 94be81d..f54c6d8 100644 --- a/src/ds/structural/Bridge.cpp +++ b/src/dp/structural/Bridge.cpp @@ -171,7 +171,7 @@ void run() { class BridgeExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Bridge"; } std::string description() const override { return "Bridge Pattern Example"; } void execute() override { @@ -180,5 +180,5 @@ class BridgeExample : public IExample { } }; -REGISTER_EXAMPLE(BridgeExample, "ds/structural", "Bridge"); +REGISTER_EXAMPLE(BridgeExample, "dp/structural", "Bridge"); } // namespace \ No newline at end of file diff --git a/src/ds/structural/Composite.cpp b/src/dp/structural/Composite.cpp similarity index 98% rename from src/ds/structural/Composite.cpp rename to src/dp/structural/Composite.cpp index 1557ef4..4b11bdb 100644 --- a/src/ds/structural/Composite.cpp +++ b/src/dp/structural/Composite.cpp @@ -429,7 +429,7 @@ void run() { class CompositeExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Composite"; } std::string description() const override { return "Composite Pattern Example"; @@ -440,4 +440,4 @@ class CompositeExample : public IExample { } }; -REGISTER_EXAMPLE(CompositeExample, "ds/structural", "Composite"); \ No newline at end of file +REGISTER_EXAMPLE(CompositeExample, "dp/structural", "Composite"); \ No newline at end of file diff --git a/src/ds/structural/Decorator.cpp b/src/dp/structural/Decorator.cpp similarity index 97% rename from src/ds/structural/Decorator.cpp rename to src/dp/structural/Decorator.cpp index 64bb1ca..675f918 100644 --- a/src/ds/structural/Decorator.cpp +++ b/src/dp/structural/Decorator.cpp @@ -189,7 +189,7 @@ void run() { class DecoratorExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Decorator"; } std::string description() const override { return "Decorator Pattern Example"; @@ -200,4 +200,4 @@ class DecoratorExample : public IExample { } }; -REGISTER_EXAMPLE(DecoratorExample, "ds/structural", "Decorator"); \ No newline at end of file +REGISTER_EXAMPLE(DecoratorExample, "dp/structural", "Decorator"); \ No newline at end of file diff --git a/src/ds/structural/Facade.cpp b/src/dp/structural/Facade.cpp similarity index 98% rename from src/ds/structural/Facade.cpp rename to src/dp/structural/Facade.cpp index 2d48d09..a5f9b6e 100644 --- a/src/ds/structural/Facade.cpp +++ b/src/dp/structural/Facade.cpp @@ -213,7 +213,7 @@ void run() { class FacadeExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Facade"; } std::string description() const override { return "Facade Pattern Example"; } void execute() override { @@ -222,4 +222,4 @@ class FacadeExample : public IExample { } }; -REGISTER_EXAMPLE(FacadeExample, "ds/structural", "Facade"); \ No newline at end of file +REGISTER_EXAMPLE(FacadeExample, "dp/structural", "Facade"); \ No newline at end of file diff --git a/src/ds/structural/Flyweight.cpp b/src/dp/structural/Flyweight.cpp similarity index 98% rename from src/ds/structural/Flyweight.cpp rename to src/dp/structural/Flyweight.cpp index 8adb017..94a1caa 100644 --- a/src/ds/structural/Flyweight.cpp +++ b/src/dp/structural/Flyweight.cpp @@ -331,7 +331,7 @@ void run() { class FlyweightExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Flyweight"; } std::string description() const override { return "Flyweight Pattern Example"; @@ -342,4 +342,4 @@ class FlyweightExample : public IExample { } }; -REGISTER_EXAMPLE(FlyweightExample, "ds/structural", "Flyweight"); \ No newline at end of file +REGISTER_EXAMPLE(FlyweightExample, "dp/structural", "Flyweight"); \ No newline at end of file diff --git a/src/ds/structural/Proxy.cpp b/src/dp/structural/Proxy.cpp similarity index 97% rename from src/ds/structural/Proxy.cpp rename to src/dp/structural/Proxy.cpp index b25f979..9c77a20 100644 --- a/src/ds/structural/Proxy.cpp +++ b/src/dp/structural/Proxy.cpp @@ -221,7 +221,7 @@ void run() { class ProxyExample : public IExample { public: - std::string group() const override { return "ds/structural"; } + std::string group() const override { return "dp/structural"; } std::string name() const override { return "Proxy"; } std::string description() const override { return "Proxy Pattern Example"; } void execute() override { @@ -230,5 +230,5 @@ class ProxyExample : public IExample { } }; -REGISTER_EXAMPLE(ProxyExample, "ds/structural", "Proxy"); +REGISTER_EXAMPLE(ProxyExample, "dp/structural", "Proxy"); } // namespace diff --git a/src/ds/structural/README.md b/src/dp/structural/README.md similarity index 85% rename from src/ds/structural/README.md rename to src/dp/structural/README.md index cb99f74..70bf189 100644 --- a/src/ds/structural/README.md +++ b/src/dp/structural/README.md @@ -5,7 +5,7 @@ Structural design patterns explain how to assemble objects and classes into larg --- ## 1. Adapter -![Diagram](../../../docs/uml/ds/structural_adapter.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_adapter.drawio.svg) **Adapter** Allows objects with incompatible interfaces to collaborate. @@ -15,7 +15,7 @@ A travel power adapter. You plug a device from one country into a socket in anot --- ## 2. Bridge -![Diagram](../../../docs/uml/ds/structural_bridge.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_bridge.drawio.svg) **Bridge** Lets you split a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently. @@ -25,7 +25,7 @@ A remote control system. The remote (abstraction) can control different devices --- ## 3. Composite -![Diagram](../../../docs/uml/ds/structural_composite.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_composite.drawio.svg) **Composite** Lets you compose objects into tree structures and then work with these structures as if they were individual objects. @@ -35,7 +35,7 @@ A company organizational chart. Managers and employees are treated uniformly. A --- ## 4. Decorator -![Diagram](../../../docs/uml/ds/structural_decorator.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_decorator.drawio.svg) **Decorator** Lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors. @@ -45,7 +45,7 @@ Adding extra features to a coffee order. You start with a plain coffee and decor --- ## 5. Facade -![Diagram](../../../docs/uml/ds/structural_facade.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_facade.drawio.svg) **Facade** Provides a simplified interface to a library, a framework, or any other complex set of classes. @@ -55,7 +55,7 @@ A home automation app. Instead of controlling lights, thermostat, and security s --- ## 6. Flyweight -![Diagram](../../../docs/uml/ds/structural_flyweight.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_flyweight.drawio.svg) **Flyweight** Lets you fit more objects into available memory by sharing common parts of state between multiple objects. @@ -65,7 +65,7 @@ In a word processor, the same font style and size is shared across multiple char --- ## 7. Proxy -![Diagram](../../../docs/uml/ds/structural_proxy.drawio.svg) +![Diagram](../../../docs/uml/dp/structural_proxy.drawio.svg) **Proxy** Lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something before or after the request reaches the original object. From 74e958658344a3455cb61acde133c14bee6482a6 Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 16 Mar 2026 15:49:24 +0700 Subject: [PATCH 9/9] Add Architecture Patterns post --- src/ap/README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/ap/README.md diff --git a/src/ap/README.md b/src/ap/README.md new file mode 100644 index 0000000..450fcf0 --- /dev/null +++ b/src/ap/README.md @@ -0,0 +1,44 @@ +## Architecture Patterns +### 1. MVVM +- **MVVM (Model - View - ViewModel)** is an architecture pattern that separates the user interface (`View`) from the business logic and data (`Model`) through an intermediary component called the `ViewModel` +- **Components:** + - **Model**: responsible for managing and abstracting data sources (databases, APIs, ..). + `Model` and `ViewModel` work together to get and save the data. + - **View**: displays data provided by the `ViewModel` and informs the `ViewModel` about user actions. This layer observes the `ViewModel` and does not contain application logic. + - **ViewModel**: exposes data and state that are relevant to the `View`, and transforms data from Model into a suitable format. Moreover, it serves as a link between the `Model` and the `View`. + - **Binder** (Data Binding): connects the View and the ViewModel, automatically synchronizing data between them. This mechanism allows the View to update when the `ViewModel` changes, and vice versa. + +- **Workflow:** + 1. User interacts with the `View` (e.g., clicks a button). + 2. The `View` notifies the `ViewModel`. + 3. The `ViewModel` processes the input, applies logic, and may request data from the `Model`. + 4. The `Model` fetches or updates the data (e.g., from an API or database). + 5. The `Model` sends data back to the `ViewModel`. + 6. The `ViewModel` updates the observable data, which automatically updates the `View` through `data binding or observers`. +```bash +User + ↓ +View ↔ ViewModel ↔ Model # view automatically update + (data binding) +``` +### 2. MVC +- **MVC (Model - View - Controller)** is an architectural pattern that separates the user interface (`View`) from the application logic and data (`Model`) using an intermediary component called the `Controller`. +- **Components:** + - **Model**: is responsible for managing and abstracting data sources (databases, APIs, etc.). The `Model` handles data retrieval, storage, and business logic. + - **View**: displays the data provided by the `Model` and represents the user interface. The `View` is responsible only for presentation and does not contain business logic. + - **Controller**: acts as an intermediary between the `View` and the `Model`. It receives user input from the `View`, processes it, and interacts with the `Model` to update or retrieve data. The `Controller` then determines which `View` should display the result. + +- **Workflow:** + 1. User interacts with the `View` (e.g., clicks a button). + 2. The `View` sends the user input to the `Controller`. + 3. The `Controller` processes the input, performs business logic, and may update the `Model`. + 4. The `Model` updates its data (e.g., saves to a database or gets data from an API). + 5. The `Controller` then updates the `View` based on the new `Model` data. +```bash +User + ↓ +View → Controller → Model + ↓ + View # view update manually +``` +### 3. Examples \ No newline at end of file