Minimal modern C++ implementation of design patterns in the book Design Patterns: Elements of Reusable Object-Oriented Software>
Author: PPM
source setup.sh
create_class.py /path/to/dir/ ClassName
see also
create_class.py -h
# in `build` folder
ctest -C Debug -VV
Template ConcreteCreator
.
template <class ProductType>
class ConcreteCreator : public Creator {
public:
ConcreteCreator();
virtual Product* MakeProduct() override;
};
Generic Singleton
.
template <typename Type, typename... Args>
class Singleton;
using MyClassSingleton = Singleton<MyClass, int, int>;
MyClassSingleton::Instance(800, 600);
Class Adapter
class Adapter : public Target, private Adaptee
Singleton Façade
. High-level interface.
Facade& Facade::Instance() noexcept {
static Facade instance;
return instance;
}
No undo
or redo
. FIFO.
ConcreteAggregate is List
; A fixed-capacity stack.
template <class Item>
class ConcreteAggregate : public Aggregate<Item> {
public:
// ...
void Push(Item item) noexcept;
void Pop() noexcept;
Item Top() const;
// ...
private:
std::array<Item, MAX_CAPACITY> m_data;
};
Manual connection to mediator
class Colleague {
public:
virtual void Changed();
virtual void ConnectTo(Mediator* mediator);
// ...
};
State
is friend class of Context
.