Simple implementation of 23 different design patterns with C++