added several design pattern implementations