Mastering Design Patterns: Singleton, Factory, and Observer
5.0|1 ratingLog in to rate
Explore software design patterns: Singleton, Factory Method, and Observer with parallel C++ and Python implementations.
#oop#architecture#design-patterns#singleton#factory
Software Design Patterns Overview
Design patterns are typical solutions to common problems in software design. They are divided into three groups:
• Creational: Deal with object creation mechanisms (e.g. Singleton, Factory). • Structural: Deal with assembling classes into larger structures (e.g. Adapter, Decorator). • Behavioral: Deal with communication and delegation between objects (e.g. Observer, Strategy).
Let's write down standard implementations of Singleton and Factory.
Thread-Safe Singleton in C++
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <mutex>
class DatabaseConnectionPool {
private:
static DatabaseConnectionPool* instance;
static std::mutex mutex;
// Private constructor blocks direct instantiations
DatabaseConnectionPool() {}
public:
// Double-checked locking pattern for multi-threading safety
static DatabaseConnectionPool* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mutex);
if (instance == nullptr) {
instance = new DatabaseConnectionPool();
}
}
return instance;
}
};
// Initialize static fields
DatabaseConnectionPool* DatabaseConnectionPool::instance = nullptr;
std::mutex DatabaseConnectionPool::mutex;Metaclass-based Singleton in Python
python
1
2
3
4
5
6
7
8
9
10
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class DatabaseConnectionPool(metaclass=SingletonMeta):
def __init__(self):
self.connection_string = "postgresql://..."Discussion
Loading discussion...