design patterns(2)