Design Pattern Learning