23 design patterns (C++)