Design pattern C++