gof design pattern with ruby