Design pattern c++ code implementation