design-pattern-cpp creational abstract_factory builder factory_method prototype singleton structural adapter bridge composite decorator facade flyweight proxy behavioral interpreter template_method chain_of_responsibility command iterator mediator memento observer state strategy visitor