learning Design Pattern