add several design patterns